我有两个共享对象:A.so和B.so A.so包含函数add_check_2a的定义
从main.c中的main函数,我使用dlsym在B.so中调用函数add()。 这个函数add()需要调用在A.so
中定义的函数add_check_2aA.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 萨班
答案 0 :(得分:3)
我自己找到了解决方案。这很简单。
我们应该使用RTLD_GLOBAL |打开.so dlopen中的RTLD_NOW标志。
不删除此问题,以便此信息对其他人有任何帮助