错误日志信息
1
| /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.21' not found
|
系统环境
1 2
| CentOS Linux release 7.6.1810 (Core) Linux centos7 3.10.0-957.5.1.el7.x86_64
|
查看当前 libstdc++(GLIBCXX)的版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| # strings /usr/lib64/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.19
,并不支持 GLIBCXX_3.4.21
,因此当安装需要依赖 GLIBCXX_3.4.21
的软件时,就会出现 /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.21' not found
的错误。
查找 libstdc++.so.6.0.21 库文件
1 2 3 4 5
| # find / -name libstdc++.so.6.0.21
|
编译新版本的 GCC
GCC 各版本的下载地址在这里,其中 gcc-5.2.0
对应 GLIBCXX_3.4.21
与 libstdc++.so.6.0.21
,而 gcc-6.5.0
对应 GLIBCXX_3.4.22
与 libstdc++.so.6.0.22
,根据自己的需要下载对应版本的 GCC 即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| # wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-5.2.0/gcc-5.2.0.tar.bz2
# tar -xvf gcc-5.2.0.tar.bz2
# cd gcc-5.2.0
# mkdir build
# cd build
# make -j8
|
建立软链接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| # cd build
# find . -name "libstdc++.so*" ./prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so ./prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 ./prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 ./stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so ./stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 ./stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 ./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so ./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 ./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21
# cp ./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 /usr/lib64
# cp /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak
# ln -s -f /usr/lib64/libstdc++.so.6.0.21 /usr/lib64/libstdc++.so.6
# cd /usr/lib64
# ls -al /usr/lib64/libstdc++.so.6* lrwxrwxrwx. 1 root root 19 3月 12 10:08 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.21 -rwxr-xr-x. 1 root root 991616 10月 30 14:39 /usr/lib64/libstdc++.so.6.0.19 -rwxr-xr-x. 1 root root 11485880 3月 12 10:01 /usr/lib64/libstdc++.so.6.0.21
|
验证新的 libstdc++.so.6.0.21 库文件是否生效
如果在下面的输出结果中,出现 GLIBCXX_3.4.21
,则代表新的 libstdc++.so.6.0.21
库文件生效了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| # strings /usr/lib64/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
|
参考文章