在 CentOS 7 上找不到 GLIBCXX_3.4.21

问题描述 投票:0回答:6

我最近将 CentOS 上的 gcc 版本从 4.7 更新到 5.4,但现在编译程序时出现以下错误

/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found

我找到了一些解决方案,但我仍然无法解决问题。这些是我用

whereis gcc

找到的路径
gcc: /usr/bin/gcc /usr/lib/gcc /usr/local/bin/gcc /usr/local/lib/gcc /usr/libexec/gcc /usr/share/man/man1/gcc.1.gz

并在 CentOS 上使用了这个 libstdc 包。

gcc centos libstdc++
6个回答
44
投票

尝试

export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/usr/local/lib64:/usr/lib64


7
投票

也许对某人会有帮助: 我安装了devtoolset-7,但没有GLIBCXX_3.4.21,最高版本是GLIBCXX_3.4.19。很长一段时间我都在寻找解决方案。对我有用的:我克隆了 gcc 7.3 存储库,进行了构建并安装。然后将 libstdc++.so.6 和 libstdc++.so.6.0.24 复制到 devtools-7, lib64 文件夹中,就可以工作了。


4
投票

我没有 sudo 访问我的 CentOS 机器的权限,所以我用 conda 安装了 gcc。如果您使用 conda 安装了 gcc,则上述答案将不起作用。 检查你的 gcc 安装路径为:

$ which gcc

输出:

/home/ags/miniconda3/envs/GE/bin/gcc

这表明 gcc 安装在

GE
conda 环境中,现在导出 LD_LIBRARY_PATH 作为此环境中
lib
目录的路径。

export LD_LIBRARY_PATH=/home/ags/miniconda3/envs/GE/lib:$LD_LIBRARY_PATH

希望这有帮助。


3
投票

只是您的

libstdc++.so.6
不包括
GLIBCXX_3.4.21
,所以您需要替换该库。

当我用

libstdc++.so.6.0.28
检查
strings libstdc++.so.6.0.28 | 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_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_DEBUG_MESSAGE_LENGTH

因此,使用

libstdc++.so.6.0.28
重新创建符号将解决您的问题(也解决了我的问题;))。


2
投票

找到你的 gcc 安装位置并更新 LD_LIBRARY_PATH

例如

  1. /usr/local/gcc/7.2.0/
  2. setenv LD_LIBRARY_PATH /usr/local/gcc/7.2.0/lib64/:$LD_LIBRARY_PATH

0
投票

1.准备

sudo yum provides libstdc++.so.6

2.下载新版本 libstdc.so

注意:由于我需要版本 3.4.22+,所以我可以将其更新到 3.4.26。其他版本都一样

cd /usr/local/lib64
sudo wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip
unzip libstdc.so_.6.0.26.zip
cp libstdc++.so.6.0.26 /usr/lib64
cd /usr/lib64

3.检查libstdc++.so.6的软链接版本

ls -l | grep libstdc++

可能会显示如下:

libstdc++.so.6 ->libstdc++.so.6.0.19

4.删除/usr/lib64原链接libstdc++.so.6,删除前可以备份一下。

sudo rm libstdc++.so.6

然后,重新链接它。

sudo ln -s libstdc++.so.6.0.26 libstdc++.so.6

好的,查看最新链接

strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

可能会显示如下:

GLIBCXX_3.4

GLIBCXX_3.4.25

GLIBCXX_3.4.26

GLIBCXX_DEBUG_MESSAGE_LENGTH

完成!

© www.soinside.com 2019 - 2024. All rights reserved.