nm报告的未解析符号

unresolved symbols reported by nm

本文关键字:符号 报告 nm      更新时间:2023-10-16

我正在编译我的代码以创建一个共享库,并最终将它们链接到正确的库(共享库)。然而,当我用"nm-u"查看共享库时,它显示了未解析的符号,主要来自(libm.so和libstdc++.so)。

这些符号是由nm为libm和libstdc++报告的吗?请注意,我正在为QNX操作系统进行交叉编译。

提前感谢并致以良好的问候,

这些符号是由nm为libm和libstdc++报告的吗?

是:当您链接到共享库时,符号将保持未解析状态。它们在运行时绑定到共享库中的定义。这就是相对于其他库动态链接的意思

更新:

我发现其他未解析的符号也适用于libsocket.so。它看起来像这样:
U connect@@libsocket.so.2
但数学库的符号是这样的:
U pow
尽管所有这些都是共享库,但为什么会有这种差异呢。

这是因为libsocket中的connect是版本化符号,而libm中的pow不是。您可以在此处阅读有关版本符号的信息。

还有另一个共享库,当我链接到它时,它会显示以下符号:
W _ZN15HWPos15getCCount
为什么会有这种区别?

这是一个定义较弱的符号,而不是一个未解析的符号。你可以在这里阅读弱ELF符号。