/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。
答案 0 :(得分:16)
GCC 5.1或5.2(现在不记得了,google)改变了C ++ ABI。您的标准ubuntu(包括libstdc ++)是使用旧的ABI编译的。
您的gcc编译器尝试使用新的ABI。有时候它有效,大部分时间都没有 - 没有。
因此,有三种编译代码的方法:
1)降级gcc
2)添加-D_GLIBCXX_USE_CXX11_ABI = 0(cmake示例)标志(如果你这样做,你应该将这个标志添加到你构建的每个makefile或项目中 你升级ubuntu或降级gcc)
3)升级Ubuntu(测试它,顺便说一下16.04的方式是新的ABI和默认的新gcc,我不得不在我的所有宠物项目中使用ack-grep并删除上面提到的标志)
还:Understanding GCC 5's _GLIBCXX_USE_CXX11_ABI or the new ABI
P.S。有趣的是,问题的答案是:_ZNSt7__cxx11
: CXX11 ,但我们并没有真正阅读错误消息。
答案 1 :(得分:1)
需要这种解决方法,以避免在运行带有SASS支持的“扩展”雨果时出现libstdc ++错误。
wget -q -O libstdc++6 http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.10_amd64.deb
sudo dpkg --force-all -i libstdc ++ 6
wget -q -O hugo.deb https://github.com/gohugoio/hugo/releases/download/v0.46/hugo_extended_0.46_Linux_64bit.deb
sudo dpkg -i hugo.deb
我找到了这个答案here,它对我有用
答案 2 :(得分:0)
将libstdc ++ 6下载链接更新为:
http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.12_amd64.deb
答案 3 :(得分:0)
所以我在ubuntu 18.04上遇到了相同的错误,这些是修复它的步骤:
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
您会得到类似的东西
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_DEBUG_MESSAGE_LENGTH
然后运行:
sudo add-apt-repository ppa:ubuntu-toolchain-r / test
sudo apt-get更新
sudo apt-get install gcc-5
sudo apt-get升级libstdc ++ 6
至少再次运行以确认更改
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX