libstdc++.so.6:找不到版本“GLIBCXX_3.4.20”

libstdc++.so.6: version `GLIBCXX_3.4.20' not found

为了将 raw-reads > 2GB 上传到 Genebank 上的 SRA,我在 ubuntu 16.04 上安装了 aspera connect 插件。但是插件并没有按照基因库SRA门户上的说明弹出。

我在本地初始化插件时在终端上遇到此错误 (~/.aspera/connect/bin/asperaconnect):

lib/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /usr/lib/x86_64-linux-gnu/libproxy.so.1)
Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgiolibproxy.so

我关注了一些帖子,创建了一个link到/usr/lib/libstdc++.so.6 但是没有解决问题,仍然显示上面的错误信息。 运行 strings /usr/lib/libstdc++.so.6 | grep GLIBCXX 明白了:

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_3.4.22
GLIBCXX_3.4.23
GLIBCXX_DEBUG_MESSAGE_LENGTH

GLIBCXX_3.4.20 在列表中。我不知道如何让插件识别。

谢谢, Xp

考虑到 /usr/lib/x86_64-linux-gnu/libproxy.so.1 由 Ubuntu 提供,我们假设它与系统 libstdc++ 库兼容。这意味着该应用程序实际上并未使用该系统库,而是使用了其他版本。我建议检查应用程序是否设置 LD_LIBRARY_PATH 以及该路径上是否还有 libstdc++.so.6 的另一个副本。在这种情况下,请尝试将其移开或删除——然后应用程序应切换到系统库,该库更新且应向后兼容。

懒人的答案 在大多数情况下这应该可以解决问题

apt-get update && apt-get install sudo && \
sudo apt-get install build-essential software-properties-common -y && \
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y && \
sudo add-apt-repository ppa:george-edison55/cmake-3.x -y && \
sudo apt-get update && \
sudo apt-get install gcc-snapshot -y && \
sudo apt-get update && \
sudo apt-get install gcc-6 g++-6 -y && \
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6 && \
sudo apt-get install gcc-4.8 g++-4.8 -y && \
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8 && \
sudo update-alternatives --config gcc && \
sudo apt-get update && \
sudo apt-get install cmake -y;

这是 Ubuntu 16.04

中针对此问题的解决方案
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9
sudo apt-get upgrade libstdc++6

您可以像这样检查您是否获得了所需的 GLIBCXX 版本:

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

我解决了这样的问题(但在 CentOS 上 GLIBCXX_3.4.21)但它不依赖于 os。该库是 gcc 编译器的一部分,因此需要安装或编译适当版本的 gcc。这是 gcc 版本的 table 和适当版本 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

(完整的版本列表是 here

它不依赖于如何安装 gcc - 它可以从软件包安装或从源代码编译安装。

很明显系统 gcc 库可用而不是新安装的。因此需要在命令行中指定环境变量在哪里可以找到库,例如:

$ LD_LIBRARY_PATH=/usr/local/lib64 command args ...

我在安装 h3 时也 运行 进入了这个。 oklas 的回答帮助了我,但扩展了那个答案。 "conda install -c anaconda gcc" 的 gcc 版本是 4.8.5。它与 libstdc++.so.6.0.22 不兼容。所以我卸载了它并安装了特定版本的 gcc(版本 6),它解决了我的问题。