gpt4 book ai didi

c - 解决共享库的 undefined symbol

转载 作者:太空宇宙 更新时间:2023-11-04 03:38:22 24 4
gpt4 key购买 nike

在 C 程序中,我想使用 dlopen 添加特定模块作为共享库。

使用dlopenRTLD_LAZY(直接使用RTLD_NOW失败可能是下面的原因)和dlsym我可以创建我想调用的实际函数的句柄。调用函数后出现错误

program: symbol lookup error: file.so: undefined symbol: createExpressionNumber

createExpressionNumber 函数是程序的一个函数。共享库由

编译
gcc -fPIC -c ...

和链接

gcc -shared ...

看起来,当链接为共享库时符号没有被解析(这是有道理的),但是当打开库时我的程序没有提供符号。

有没有什么方法可以将我的程序的功能提供给加载的共享库,或者我是否需要从我的程序中提取共享库使用的所有功能作为单独的共享库?

最佳答案

你需要-rdynamic在您的主程序链接行上。那会:

Pass the flag -export-dynamic to the ELF linker, on targets that support it. This instructs the linker to add all symbols, not only used ones, to the dynamic symbol table. This option is needed for some uses of "dlopen" or to allow obtaining backtraces from within a program.

即将允许动态加载的共享库查找主要可执行文件的符号。

关于c - 解决共享库的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30466947/

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