1
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++ 中可能已在更高版本中删除的符号吗?

非常感谢您的任何建议,

4

1 回答 1

11

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

  -lstdc++

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

于 2014-09-17T00:44:34.440 回答