解决共享库的未定义符号

Resolve undefined symbol for shared libraries

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

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

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

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

编译
gcc -fPIC -c ...

并由

链接
gcc -shared ...

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

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

您的主程序 link 行需要 -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.

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