GLIBCXX_3.4.21未在文件libstdc ++。so.6中定义,带有链接时间参考

时间:2016-04-23 21:19:56

标签: c++ gcc linker libstdc++

道歉,我理解与此非常相似的问题已被相对经常提出,虽然没有一个解决方案似乎对我有用。当试图运行任何合理复杂的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。

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)

答案 3 :(得分:0)

所以我在ubuntu 18.04上遇到了相同的错误,这些是修复它的步骤:

  1. 运行此命令以检查缺少的内容
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