2017-05-24 89 views
0

我使用dlopen()加载.so库。图书馆拨打myfunc()。该功能可用于装载机的版本1.0。所以致电myfunc()作品。然而,在版本0.9中,没有myfunc(),并且libdl显示关于延迟绑定失败的错误。检查符号是否可用,以防止dlopen懒惰绑定失败

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

回答

0

在和ELF平台,可以使用弱悬而未决的参考实现自己的目标:

// 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()); 
    } 
} 
相关问题