nm:“U”符号未定义

当我在我的一个库中nm:

nm libmylib.so

我得到这样的一条线

U _ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4 

我检查了nm的手册页,我得到了“U”符号是未定义的。 未定义的符号究竟意味着什么?

如果它真的没有定义,那nm为什么要报告呢?

4 Solutions collect form web for “nm:“U”符号未定义”

未定义的符号是库使用的符号,但没有在创build库的任何对象文件中定义。

通常这个符号是在另一个库中定义的,它也需要链接到你的应用程序中。 或者,符号是未定义的,因为您忘记了构build定义符号的代码,或者忘记了将带有该符号的对象文件包含到库中。

在你的情况下,它看起来像你的实现的C库中的一个符号,所以你可能希望在你自己的库中是未定义的。 它将在您的libc.so中定义,可能是/ usr / lib。

这意味着在这种情况下,库引用符号( std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_S_empty_rep_storage ?),但是它没有定义它; 你链接的程序的一部分,或者其他一些库应该这样做。 如果你的意思是在你的库中定义它,这意味着你没有将该对象文件与该符号的定义与库代码的其余部分链接起来。

解密这个可以这样做:

  U _ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4 

手段:

  U->>> in your library its undefined 

什么是未定义的?

  _ZNSs4_Rep20_S_empty_rep_storageE 

哪里可能find它?

  GLIBCXX_3.4 

我认为这意味着:在这个对象中未定义。 一些符号在运行时进行评估; 这可能是其中之一。

  • 链接器内联函数可以吗?
  • 链接到.so文件中较旧的符号版本
  • 解决LNK4098:defaultlib'MSVCRT'冲突
  • ld链接器问题: - 整个归档选项
  • 编译失败,因为在创build共享对象时不能使用“.rodata.str1.8”的重定位R_X86_64_32“
  • 为什么在Visual Studio中编译C ++项目时发生致命错误“LNK1104:无法打开文件”C:\ Program.obj“”?
  • 何时使用Visual Studio其他依赖关系?
  • C和汇编实际编译到什么地方?
  • 用黄金取代ld - 任何经验?
  • .exp有什么用处,.lib和.dll有什么区别
  • gcc不会正确包含math.h