nm报告的未解析符号

时间:2012-03-27 07:09:09

标签: c++ linker

我正在编译我的代码以创建共享库,最后将它们链接到正确的库(共享库)。但是当我用“nm -u”查看我的共享库时,它显示了未解析的符号,主要来自(libm.so和libstdc ++。so)。我用标志-Wl, - no-undefined -Wl, - no-undefined-version编译它,但在链接期间它不会报告任何内容。

这些符号是否由nm报告为libm和libstdc ++? 请注意,我正在为QNX OS进行交叉编译。

提前致谢,亲切的问候,

1 个答案:

答案 0 :(得分:3)

  

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

是:当您链接到共享库时,符号仍未解析。它们绑定到 runtime 的共享库中的定义。这就是意味着与其他库动态链接的内容。

更新

  

我发现libsocket.so也有其他未解决的符号。它看起来像这样:
  U connect@@libsocket.so.2
  但数学图书馆的符号是这样的:
  U pow
  即使所有这些都是共享库,为什么会出现这种差异。

这是因为connect中的libsocket是版本化符号,但pow中的libm不是。您可以阅读版本化符号here

  

还有另一个共享库,当我链接它时会显示这个符号:
  W _ZN15HWPos15getCCount
  为什么会出现这种差异?

这是一个弱定义的符号,而不是未解决的符号。您可以阅读弱ELF符号here