.lib中的符号不​​在.so中

时间:2016-12-30 10:57:02

标签: c linux linker symbols

我有一个库文件(.lib),其中有许多功能。我正在尝试从中构建一个共享对象。但库中的符号中没有符号存在于库中的共享对象中。但是,当我从同一个库中生成可执行文件时,符号是可见的。

图书馆有问题吗? 我是否需要以适合创建共享对象的格式编译库?

1 个答案:

答案 0 :(得分:1)

链接器的作用是仅从解析未解析符号的存档.o中提取.a个文件。

链接共享库并仅将.a文件传递给链接器时,没有未解析的符号,因此.a中的任何目标文件都不会被拉入共享库。

要链接共享库,必须将目标文件编译为与位置无关的代码(-fPIC.o .a文件通常在没有此选项的情况下构建)然后链接到共享图书馆。不需要.a个文件。

另一个选择是链接.a文件时使用.a链接器选项显式取消定义-Wl,--undefined=<symbol>中存在的符号。但是这不能很好地扩展,因为它需要提到包含.o的每个.a中的至少一个符号(假设链接器引入整个.o,而不是仅仅引入一个符号)。