【问题标题】:Check if a symbol is available, to prevent dlopen lazy binding failure检查符号是否可用,以防止 dlopen 延迟绑定失败
【发布时间】:2017-05-24 06:00:38
【问题描述】:

我使用dlopen() 加载.so 库。库调用myfunc()。该功能在加载程序的1.0 版本中可用。所以调用myfunc() 有效。但是在0.9 版本中,没有myfunc(),并且libdl 显示有关延迟绑定失败的错误。

我可以在so. 库中检查myfunc() 是否存在,然后才调用该函数吗?该函数不是强制性的,并不重要,如果 loader 的版本为0.9 或更低版本,我可以安全地跳过调用它。

【问题讨论】:

    标签: symbols dlopen dynamic-library undefined-symbol


    【解决方案1】:

    在和ELF平台上,你可以使用weak unresolved reference来达到你的目的:

    // libfoo.c
    extern int myfunc() __attribute__((weak));
    int foo()
    {
       if (&myfunc == NULL) {
         printf("myfunc is not defined\n");
       } else {
         // myfunc is available, call it
         printf ("myfunc returns %d\n", myfunc());
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-05-12
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 2013-08-09
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多