gpt4 book ai didi

shared-libraries - 使用 dlopen 加载库时收到 "undefined symbol"错误

转载 作者:行者123 更新时间:2023-12-03 12:06:47 34 4
gpt4 key购买 nike

我正在编写一些使用动态共享库作为插件的代码。

我用于构建共享库的命令行如下所示:

cc -shared -fPIC -o module.so -g -Wall module.c

在模块中,我可以调用在主可执行文件中加载的任何其他共享库中的函数。

但是我无法访问(导出)可执行文件本身的函数(我得到 undefined symbol 错误)。

我的电话 dlopen看起来像这样:
void *handle = dlopen(plugin, RTLD_NOW);

谁能告诉我的模块如何回调我的可执行文件,而不必将所有可执行文件的实用程序函数放入另一个共享库中?

最佳答案

我自己找到了答案。

我必须添加 --export-dynamic主可执行文件的链接选项的标志。

When creating a dynamically linked executable, add all symbols to the dynamic symbol table. The dynamic symbol table is the set of symbols which are visible from dynamic objects at run time.

If you do not use this option, the dynamic symbol table will normally contain only those symbols which are referenced by some dynamic object mentioned in the link.

If you use "dlopen" to load a dynamic object which needs to refer back to the symbols defined by the program, rather than some other dynamic object, then you will probably need to use this option when linking the program itself.

关于shared-libraries - 使用 dlopen 加载库时收到 "undefined symbol"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/480617/

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