【问题标题】:linker error cannot find symbol name in library链接器错误在库中找不到符号名称
【发布时间】:2013-02-15 05:11:58
【问题描述】:
g++ (GCC) 4.7.2 
3.7.6-201.fc18.x86_64 #1 SMP Mon Feb 4 15:54:08 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
Fedora release 18 (Spherical Cow)

你好,

我正在编译并在尝试链接程序时遇到问题。

链接器错误是:

/usr/bin/ld: point.o: undefined reference to symbol '_Znwj@@GLIBCXX_3.4'
/usr/bin/ld: note: '_Znwj@@GLIBCXX_3.4' is defined in DSO /lib/libstdc++.so.6 so try adding it to the linker command line
/lib/libstdc++.so.6: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status

这个目标文件是 point.o 正在尝试调用 libstdc++ 中不存在的函数。

当我尝试使用 readelf 检查符号名称是否存在时,我找不到它。

readelf --all libstdc++.so.6.0.17 | grep _Znwj@@GLIBCXX_3.4

这是因为 point.o 正在寻找旧的 libstdc++ 中的符号,该符号可能已在更高版本中删除?

非常感谢您的任何建议,

【问题讨论】:

  • 你能展示你的编译行吗?
  • 另外,你试图调用哪个函数在 libstdc++ 中不存在?你确定它不存在吗?
  • 我在以前可以工作的代码上遇到了同样的问题,现在移植到不同的 linux 机器时,即将 C 和 C++ 源代码编译到同一个可执行文件中。我怀疑这与命名空间的处理方式有关。

标签: linker g++


【解决方案1】:

就我而言,我使用的是 gcc 而不是 g++。它曾经在 12 年工作,但后来在 14 年在另一台机器上构建时阻塞了。 gnu 编译器确实发生了变化。我的答案是添加

  -lstdc++

到链接行的末尾,如错误消息所示。 HTH。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-15
    • 2012-05-08
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多