【发布时间】:2019-08-09 11:27:12
【问题描述】:
动态库(.so)文件中没有静态库文件或函数的符号。
我使用的是 ubuntu 18.04 和 12.04 系统。 我使用 -fPIC 选项从 cpp 文件创建了一个目标文件,而不是创建的静态库 (.a)。 之后我使用命令创建了一个动态库:g++ -shared -I(include path) -L(other library path) -l(librarys) -o filename.so -Wl,-soname,filename.so staticlib.a" 我显示了在 12.04 ubuntu 系统中创建的符号,但不是在 18.04 系统中创建的符号。 我显示了由so文件中没有符号创建的so文件。我们可以使用 nm -g filename .so 来检查它。
如果我尝试使用 12.04,我在 18.04 系统中的 nm 命令中得到了这种类型的结果,它会为我提供所有 cpp 文件的完整符号。
$ nm -g libPJ.so
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
0000000000201020 B __bss_start
w __cxa_finalize
w __gmon_start__
0000000000201020 D _edata
0000000000201028 B _end
000000000000052c T _fini
0000000000000410 T _init
【问题讨论】:
-
我怀疑你使用的是 gcc,请将其添加到标签中,因为这不是一般的 c 问题
-
@Raidri 感谢此链接对我有用。我需要在静态库之前和之后使用 -Wl,--whole-archive 和 -Wl,--no-whole-archive。