gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:15 25 4
gpt4 key购买 nike

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

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

空调:

int add_check_2a( int a, int b){

返回(a+b);

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

extern int add_check_2a(int a, int b);

整数添加(){

返回 add_check_2a(10,5);

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

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

主.c:

dlopen(A.so, RTLD_LOCAL | RTLD_LAZY);

dlopen(B.so, RTLD_LOCAL | RTLD_LAZY);

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

我不想在 B.c 中再执行一次 dlopen,而是希望链接器以某种方式进行惰性绑定(bind)。

有什么建议吗?

RGds沙巴

最佳答案

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

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

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

关于c - 无法在共享对象中找到符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18140181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com