1

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

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

交流:

int add_check_2a(int a,int b){

返回 (a+b);

}

在 Bc 文件中,我定义了如下内容:

extern int add_check_2a(int a, int b);

整数添加(){

返回 add_check_2a(10,5);

}

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

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

主.c:

dlopen(A.so, RTLD_LOCAL | RTLD_LAZY);

dlopen(B.so, RTLD_LOCAL | RTLD_LAZY);

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

我不想在 Bc 中做另一个 dlopen 并希望链接器以某种方式进行惰性绑定。

有什么建议么?

RGds萨潘

4

1 回答 1

3

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

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

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

于 2013-08-09T05:22:25.703 回答