无法在共享对象中找到符号

时间:2013-08-09 04:50:16

标签: c linux shared-libraries shared-objects

我有两个共享对象:A.so和B.so A.so包含函数add_check_2a的定义

从main.c中的main函数,我使用dlsym在B.so中调用函数add()。 这个函数add()需要调用在A.so

中定义的函数add_check_2a

A.c:

int add_check_2a(int a,int b){

返回(a + b);

}

在B.c文件中,我定义了这样的内容:

extern int add_check_2a(int a,int b);

int add(){

返回add_check_2a(10,5);

}

我指望linux LAZY绑定自动将函数调用绑定到A.so中的符号。

在main中,我在初始化期间打开了这两个共享对象。

main.c中:

dlopen(A.so,RTLD_LOCAL | RTLD_LAZY);

dlopen(B.so,RTLD_LOCAL | RTLD_LAZY);

然后我使用dlsym在B.so中找到符号添加,并使用函数指针调用该函数。

我不想在B.c中做另一个dlopen,并希望链接器以某种方式进行延迟绑定。

有什么建议吗?

RGDS 萨班

1 个答案:

答案 0 :(得分:3)

我自己找到了解决方案。这很简单。

我们应该使用RTLD_GLOBAL |打开.so dlopen中的RTLD_NOW标志。

不删除此问题,以便此信息对其他人有任何帮助