如何更改 libstdc++.so.6 的版本?

Posted

技术标签:

【中文标题】如何更改 libstdc++.so.6 的版本?【英文标题】:How to change verison of libstdc++.so.6? 【发布时间】:2018-06-10 00:25:33 【问题描述】:

我正在尝试将 libstdc++.so.6 从 4.8.3 更改为 3.4.20。

我为什么要这样做?由于这个错误:

文件“”,第 1 行,在 ImportError:/usr/lib64/libstdc++.so.6:找不到版本“GLIBCXX_3.4.20”(/var/lang/lib/python3.6/site-packages/lgraph.cpython-36m-x86_64-linux-gnu 需要.so)

因此,我认为我必须更新版本。 (我也尝试安装 gcc-8.0.1,但要么安装不正确,要么根本不起作用)。

Architecture: 2018 x86_64 x86_64 x86_64 GNU/Linux

Information:

$ bash-4.2# yum info gcc-c++

Installed Packages
Name        : gcc-c++
Arch        : noarch
Version     : 4.8.3
Release     : 3.20.amzn1
Size        : 0.0  
Repo        : installed
From repo   : amzn-main
Summary     : C++ support for GCC

I also ran this command:

bash-4.2# /sbin/ldconfig -p | grep stdc++
    libstdc++.so.6 (libc6,x86-64) => /usr/lib64/libstdc++.so.6
    libstdc++.so (libc6,x86-64) => /usr/lib64/libstdc++.so

顺便说一句,我在 docker 容器上完成所有这些工作(如果这很重要)。我正在运行的程序/包是基于:

Information: 

Architecture: CEST 2018 x86_64 GNU/Linux

server:~$/sbin/ldconfig -p | grep stdc++
    libstdc++.so.6 (libc6,x86-64) => /usr/lib/libstdc++.so.6
    libstdc++.so.6 (libc6) => /usr/lib32/libstdc++.so.6
    libstdc++.so.5 (libc6) => /usr/lib32/libstdc++.so.5
    libstdc++.so (libc6,x86-64) => /usr/lib/libstdc++.so
    libstdc++.so (libc6) => /usr/lib32/libstdc++.so

server:~$gcc --version
gcc (GCC) 8.1.1 20180531

【问题讨论】:

【参考方案1】:

解决此问题的最简单方法是使用较旧的 GCC 安装进行构建(例如 GCC 4.8,就像您运行的机器一样)。另一种方法是简单地将所需的库复制到您运行的机器上,并将它们的路径放在环境变量LD_LIBRARY_PATH中。

【讨论】:

请注意,至少经常(如果不是总是),libstdc++ 与 libc 本身的版本紧密耦合。因此,您不仅需要复制一个库,而且还必须为正确的操作系统版本构建它。不久前我尝试沿着这种路线走下去,但无法真正解决随之而来的问题 - 我最终复制了所有必要的部分,但它会出现段错误,很可能是由于操作系统版本之间的不兼容造成的主机和目标系统。【参考方案2】:

我通过在我的 docker 容器上手动安装 gcc-8.0.1 并将正确的路径添加到 LD_LIBRARY_PATH 来解决此问题。

【讨论】:

以上是关于如何更改 libstdc++.so.6 的版本?的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 libstdc++.so.6 或更改要在 Tensorflow、Python 上使用的文件

libstdc++.so.6:未找到版本 GLIBCXX_3.4.20

MATLAB 代码生成:/lib64/libstdc++.so.6:版本:未找到“GLIBCXX_3.4_20”

ld.so.1:协议:致命:libstdc++.so.6:在 Solaris 11 中找不到版本“GLIBCXX_3.4.20”

ldd 可执行文件如何找到 /usr/lib64/libstdc++.so.6?

arm-linux-gcc xx.c 缺少libstdc++.so.6