我正在编译我的代码以创建一个共享库,并最终将它们链接到正确的库(共享库)。然而,当我使用"nm -u“查看我的共享库时,它显示了未解析的符号,主要来自(libm.so和libstdc++.so)。我已经用-Wl,--no--undefined- -Wl,--no-undefined-version标志编译了它,但在链接期间它不会报告任何东西。
这些符号是由nm为libm和libstdc++报告的吗?请注意,我正在为QNX OS交叉编译。
提前感谢并致以亲切的问候,
发布于 2012-03-28 11:07:46
这些符号是由nm为libm和libstdc++报告的吗?
是:当您链接到共享库时,符号将保持未解析状态。它们在运行时绑定到共享库中的定义。这就是动态链接其他库的意义所在。
更新:
对于libsocket.so,我也发现了其他未解析的符号。它看起来是这样的:
U connect@@libsocket.so.2
但是数学库的符号是这样的:
U pow
尽管所有这些都是共享库,但为什么会有这种差异。
这是因为libsocket中的connect是版本化符号,而libm中的pow不是。您可以阅读有关版本化符号here的内容。
还有另一个共享库,当我链接到该库时,它会显示以下符号:
W _ZN15HWPos15getCCount
为什么会有这样的差异呢?
这是一个定义不明确的符号,而不是一个未解析的符号。你可以读到关于弱ELF符号的here。
https://stackoverflow.com/questions/9884852
复制相似问题