GLIBCXX_3.4.20 没有找到,怎么修复这个错误?

当我尝试在Ubuntu 14.04.1 64位LTS上运行程序布局编辑器(可在此网站上获得)时,终端会输出以下内容:
$ layout
layout: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by layout)

我尝试了以下命令strings/usr/lib/x86_64-linux-gnu/libstdc++.so.6上,并且这是输入和输出的结果:
$ 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_DEBUG_MESSAGE_LENGTH

我该如何解决这个问题,我有一种直觉它与GCC有关,但无法找出如何修复这个问题。此外,我尝试了一个PPA,如在Ubuntu上如何使用最新的GCC?所建议的,以及一个关于旧版本Ubuntu的类似问题GLIBCXX_3.4.15未找到。然而,在我运行了sudo update之后,我得到了许多警告,并且在安装了gcc 4.9后,用strings命令获得的列表没有新条目,因此我使用ppa-purge清除了PPA(Toolchains Test Builds)。非常感谢任何帮助和建议。


已经找到解决方案了吗? - Steven Roose
1@StevenRoose 我成功解决了这个问题,在添加了一些后备程序并安装了一些软件之后,但是我对细节记忆不太清楚,等我回想起来了,我会将它们作为答案发布。 - Vesnog
似乎这是符号链接的效果:http://stackoverflow.com/questions/2856438/how-can-i-link-to-a-specific-glibc-version 你只是没有链接到足够新的库版本。 - Ciro Santilli OurBigBook.com
9个回答

我在尝试运行其他程序时遇到了同样的问题,并在StackOverflow上找到了解决方案。
基本上,只需执行以下命令: 首先,安装:
sudo apt-get install libstdc++6

这应该已经默认安装了,但还是试一下。 如果它不能解决问题,只需按照以下步骤操作:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test 
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

我没有执行“dist-upgrade”命令,但之前的命令已经解决了我的问题。

我觉得这是在先添加了存储库后找到的解决方案,谢谢你的回答。 - Vesnog
9sudo apt-get dist-upgrade 解决了我的问题。 - ady
2问题解决,无需进行dist-upgrade,只需按照upgrade建议更新系统并安装最新的libstdc++ - arainone
2我需要在我的端上添加存储库、更新并进行升级。 - virtualxtc
7更新后,您可以通过 strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX 检查GLIBCXX的最新版本。 - Krishan Kumar Mourya
2Ubuntu 16.04:在2017年11月,通过add-apt-repository添加'不受信任和不支持的'ppa:ubuntu-toolchain-r/test,更新了/usr/lib/x86_64-linux-gnu/libstdc++.so.6至包括GLIBCXX_3.4.24版本--此外,这基本上更新了您机器上的所有C/C++/Fortran开发工具。 - knb
如果我不是root用户怎么办?我在一个由别人设置和运行的集群上作为普通用户,所以我不能使用sudo apt-get命令,甚至无法使用apt-get命令来安装libdistc++.so.6库文件。 - Tanner Strunk
Ubuntu 16.04和Filezilla 3.32:同样的故事,在升级后可以正常工作。 - D.Bugger
1没有添加额外的软件源,我只安装了3.4.21版本,并且我正在安装的应用程序需要3.4.22版本。有了那个软件源,现在我已经升级到了3.4.25版本。 - Davos
sudo apt-get install libstdc++6 和安装 gcc-9 对我有帮助。谢谢。 - WesternGun
对于我的情况,我首先需要执行"apt-get install software-properties-common"命令。 - SalutonMondo
很好的答案,仍在使用Ubuntu 20.04.3。干杯! - Waldir Leoncio
别忘了在之后打开一个新的终端会话,否则你的环境将不会被更新。 - ldgorman

这个问题在我的环境中也发生过,就像@mjp所说的那样,我遇到了anaconda 4.0.0的问题。但是对我来说,解决方法是运行以下命令:
conda install libgcc

8在尝试了其他线程中的许多解决方案后,这个解决方案对我很有帮助。 - Shawn Anderson
3同样适用于Ubuntu 16.04 - fviktor
1这真的救了我几次大难! - MBZ
Ubuntu 16.04 - 对我来说解决了问题。 - Zhubarb
1这样好多了..对我有用..我在尝试在Python中'import ROOT' - MycrofD
太棒了,这解决了问题。我正要放弃在Windows上安装OpenAI Gym了,现在终于可以了。 - AwokeKnowing
当anaconda python在echo $PATH中位于默认的/usr/bin之前时,这将修复libgcc错误。适用于Ubuntu 16.04。 - Samir
Conda真是太棒了,但有时候也让人很沮丧。谢谢你发布这个解决方案。 - neuronet
在我的情况下,我不得不多次运行此操作以升级到最新版本。感谢您挽救了我的一天! - diadochos
在Ubuntu 18.04上对我没用。 - water stone

我遇到了这个问题 - 是因为Anaconda2没有GLIBCXX_3.4.20版本的那个东西。只有到.19,和你的一样。 然而,Ubuntu的库里有它。所以我只是在Anaconda库中创建了一个软链接/快捷方式,指向包含GLIBCXX_3.4.20的实际Linux库,替换了之前的库,重新启动Python GUI(Spyder)后它就正常工作了。
在Anaconda库中应该有一个名为libstdc++.so.6的文件夹,它位于这里:~/anaconda2/lib。在这个文件夹中有脚本/库代码的各个版本,不包括你缺少的那个:GLIBCXX_3.4.20。
按照以下步骤解决这个问题:
  1. 前往正确的位置并备份当前的anaconda2快捷方式(更改其名称以防止被覆盖):

    cd ~/anaconda2/lib
    mv -vf libstdc++.so.6 libstdc++.so.6.old
    
  2. 使用ln命令创建一个新的快捷方式(假设我在之前的位置~/anaconda2/lib):

    ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ./libstdc++.so.6
    
  3. 重新启动spyder/其他你使用的界面

现在应该可以工作了!

对我来说,只需重命名conda .so文件,它就能找到操作系统版本,而无需链接。 - Mingwei Samuel
其他解决方案都没有起作用。我认为与其他解决方案相比,这是一个开销最小、最不具侵入性的选择之一。 - undefined

我解决了类似的问题(但是GLIBCXX_3.4.21)在CentOS上,但它与操作系统无关。该库是gcc编译器的一部分,因此需要安装或编译适当版本的gcc。这是gcc版本和适当libstdc++版本的对照表:
GCC 4.9.0: libstdc++.so.6.0.20
GCC 5.1.0: libstdc++.so.6.0.21
GCC 6.1.0: libstdc++.so.6.0.22
GCC 7.1.0: libstdc++.so.6.0.23
GCC 7.2.0: libstdc++.so.6.0.24
GCC 8.0.0: libstdc++.so.6.0.25
(版本的完整列表在这里
安装gcc的方式并不重要,可以从软件包中安装,也可以从源代码编译和安装。
有可能系统已经安装了gcc库,而不是新安装的。因此需要在命令行中指定环境变量来找到库文件,例如:
$ LD_LIBRARY_PATH=/usr/local/lib64 command args ...

2我通过更新链接/usr/lib64/libstdc++.so.6来永久解决了这个问题,将其指向我在/usr/local/lib64/libstdc++.so.6拥有的较新版本,使用以下命令:ln -fs /usr/local/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6。如果需要恢复,旧版本将不再有链接指向它。有点小技巧,但是有效。 - Matthew

安装之前:

在运行具有 SASS 支持的 "extended" Hugo 时,需要执行此解决方法以避免 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

我在Hugo支持论坛上找到了这个解决方案这里


我在这些年里多次遇到过这种情况,使用了许多不同的包裹。但是每次都得到了解决,方法如下:
sudo apt-get dist-upgrade

如果您的发行版可以升级,它几乎总是会下载一个新的C++库并重新配置一些使其再次正常工作。问题几乎总是由于系统没有指向正确的库而引起的。在我的情况下,通常是因为指向了交叉编译器版本的库。

sudo cp /usr/bin/YourGccVersionLibrary/lib64/libstdc++.so.6 /usr/bin/YourGccVersionLibrary/lib64/libstdc++.so.6.0.20 /usr/lib/x86_64_linux-gnu/

5欢迎来到Ask Ubuntu!我建议你编辑这个回答,用具体的细节来扩展它,解释这个命令的目的是什么。(另请参阅如何撰写一个好的回答?以获取关于在Ask Ubuntu上哪种类型的回答被认为最有价值的一般建议。) - David Foerster
7为什么要使用cp而不是ln -s - A.B.

我在使用Virtualbox安装Ubuntu 18.04时遇到了同样的问题,使用了live-server镜像。我不确定自己哪里做错了,但是出现了相同的错误。
"apt-get: symbol lookup error: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: undefined symbol: , version GLIBCXX_3.4.11"

我之前使用的是64位系统,不得不通过下载这个文件来完成。
wget http://security.ubuntu.com/ubuntu/pool/main/g/gcc-8/libstdc++6_8.4.0-1ubuntu1~18.04_amd64.deb

使用dpkg -i进行安装。 然后一切正常运行,使用APT。

然后执行apt-get upgrade以确保一切顺利。


这对我有用(即使是针对较新的glibcxx,如GLIBCXX_3.4.29)
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt upgrade libstdc++6