我正在编译我的代码以创建共享库,最后将它们链接到正确的库(共享库)。但是当我用“nm -u”查看我的共享库时,它显示了未解析的符号,主要来自(libm.so和libstdc ++。so)。我用标志-Wl, - no-undefined -Wl, - no-undefined-version编译它,但在链接期间它不会报告任何内容。
这些符号是否由nm报告为libm和libstdc ++? 请注意,我正在为QNX OS进行交叉编译。
提前致谢,亲切的问候,
答案 0 :(得分:3)
这些符号是否由nm报告为libm和libstdc ++?
是:当您链接到共享库时,符号仍未解析。它们绑定到 runtime 的共享库中的定义。这就是意味着与其他库动态链接的内容。
更新
我发现libsocket.so也有其他未解决的符号。它看起来像这样:
U connect@@libsocket.so.2
但数学图书馆的符号是这样的:
U pow
即使所有这些都是共享库,为什么会出现这种差异。
这是因为connect
中的libsocket
是版本化符号,但pow
中的libm
不是。您可以阅读版本化符号here。
还有另一个共享库,当我链接它时会显示这个符号:
W _ZN15HWPos15getCCount
为什么会出现这种差异?
这是一个弱定义的符号,而不是未解决的符号。您可以阅读弱ELF符号here。