抱歉,我知道与此非常相似的问题被问得比较频繁,尽管似乎没有一个解决方案对我有用。当尝试运行任何具有合理复杂性的 c++ 代码时,我得到了上述错误。完整的错误信息是:
/main: relocation error: ./main: symbol _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1Ev, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference
运行另一个项目,我得到一个非常相似的错误:
./main: relocation error: ./main: symbol _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1Ev, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference
我实际上对编译没有任何问题,因为这些项目都编译得很好。这只是在我尝试运行可执行文件时发生。我认为这是我的 gcc 安装错误,所以今天我重新安装了它,尽管这根本没有帮助。我真的不知道该怎么做才能解决这个问题,有人可以提供帮助吗?
这是我用来编译其中一个项目的 Makefile,我觉得这可能是错误所在:
CC= g++
CFLAGS= -Wall -g -std=c++11 -lX11 -lpthread
OBJS = main.o Board_Tile.o Sliding_Solver.o
main: $(OBJS)
$(CC) -o $@ $(OBJS)
%.o : %.cc
$(CC) $(CFLAGS) -c $^
我的 gcc 版本是 5.3.0,我正在运行 Ubuntu 14.0.4。
原文由 asharkdoctor 发布,翻译遵循 CC BY-SA 4.0 许可协议
GCC 5.1 或 5.2(现在不记得了,google it)改变了 C++ ABI。您的标准 ubuntu(包括 libstdc++)是使用旧 ABI 编译的。
您的 gcc 编译器尝试使用新的 ABI。有时它有效,大部分时间 - 不。
因此,有 3 种方法可以编译您的代码:
1)降级gcc
2)添加 -D_GLIBCXX_USE_CXX11_ABI=0 (cmake示例)标志(如果你这样做,你应该将此标志添加到你构建的每个makefile或项目中,直到你升级ubuntu或降级gcc)
另外: 了解 GCC 5 的 _GLIBCXX_USE_CXX11_ABI 或新的 ABI
PS有趣的事情,答案就在问题中:
_ZNSt7__cxx11
: CXX11 ,尽管我们并没有真正阅读错误消息。