bba*_*zso 49 c++ linker development-environment
当我在我的一个lib上nm:
nm libmylib.so
我得到这样一条线
U _ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4
Run Code Online (Sandbox Code Playgroud)
我查看了nm的手册页,我得到了"U"符号未定义.未定义的符号究竟意味着什么?
如果它确实是未定义的,那么为什么nm会报告它呢?
Tro*_*our 43
未定义的符号是库使用的符号,但未在创建库的任何目标文件中定义.
通常,符号在另一个库中定义,该库也需要链接到您的应用程序.或者,符号未定义,因为您忘记构建定义符号的代码,或者您忘记将带有该符号的目标文件包含到库中.
在您的情况下,它看起来像您的实现的C库中的符号,因此您可能希望在您自己的库中未定义.它将在你的libc.so中定义,无论在哪里,可能是/ usr/lib.
破译可以这样完成:
U _ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4
Run Code Online (Sandbox Code Playgroud)
方法:
U->>> in your library its undefined
Run Code Online (Sandbox Code Playgroud)
什么是未定义?
_ZNSs4_Rep20_S_empty_rep_storageE
Run Code Online (Sandbox Code Playgroud)
哪里可能找到它?
GLIBCXX_3.4
Run Code Online (Sandbox Code Playgroud)
现在回答你的问题:“为什么它是未定义的:”,这是因为链接器无法找到它的定义
第二部分:“如果它未定义,为什么要报告”,nm 实用程序将读取您的 lib 的整个符号表并打印它。因此,它只是读取和打印它,而不对其进行任何操作。