【发布时间】: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++ 源代码编译到同一个可执行文件中。我怀疑这与命名空间的处理方式有关。