可以用如下命令查看一下当前GCC版本:
strings /usr/lib/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_FORCE_NEW
如果有动态库中要求的GCC版本 ,例如“GLIBCXX_3.4.14”,就要从已经有该库的位置拷贝到/usr/lib/
和/usr/lib64
.
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 版本根据自己的需要进行选择。
对应关系地址:
https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html
# 这里以一个为例
# 查找库文件
$ find / -name libstdc++.so.6.0.21
$ /lib/libstdc++.so.6.0.21
如果libstdc++.so.6.0.21库文件已存在,则按照下面的步骤创建软链接即可
$ cp /lib/libstdc++.so.6.0.21 /usr/lib
$ cp /lib/libstdc++.so.6.0.21 /usr/lib64
# 删除旧的链接文件
$ rm -f libstdc++.so.6
#分别进入/usr/lib和/usr/lib64目录 创建新的链接文件
$ ln -s libstdc++.so.6.0.21 libstdc++.so.6
# 查看最终的libstdc++.so库文件列表
$ 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
如果下面的输出结果中,出现 GLIBCXX_3.4.21,则代表新的 libstdc++.so.6.0.21 库文件生效。
$ strings /usr/lib64/libstdc++.so.6 | grep GLIBC
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
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.17
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
如果libstdc++.so.6.0.21库文件不存在,则需要按照下面的步骤编译新版本的GCC,然后再创建软链接
GCC 各版本的下载地址
https://ftp.tsukuba.wide.ad.jp/software/gcc/releases/
# 下载文件(117M)
$ 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
# 下载编译gcc所需的依赖文件和库
$ ./contrib/download_prerequisites
#********************************
#如果./contrib/download_prerequisites执行报错,按下执行
#wget http://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2
#wget http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2
#wget http://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz
#wget http://gcc.gnu.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2
#**********************************
# 建立输出目录,用于存放编译时所有产生的中间文件
$ mkdir gcc-temp
# 进入输出目录
$ cd gcc-temp
# 执行configure配置
$ ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
# 编译gcc,指定编译使用的线程数为8,编译耗时较长,可能需要几个小时
$ make -j8
# 这里为了避免影响系统的稳定性,暂时不执行"make install"和替换系统默认版本的gcc
# 进入输出目录
$ cd gcc-temp
# 查找编译生成libstdc++.so库文件,下面查找到的libstdc++.so、libstdc++.so.6都只是软链接文件,libstdc++.so.6.0.21才是真正编译生成的库文件
$ 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
# 拷贝libstdc++.so.6.0.21库文件到lib64目录
$ cp ./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 /usr/lib64
# 进入lib64目录
$ cd /usr/lib64
# 删除旧的链接文件
$ rm -f libstdc++.so.6
# 创建新的链接文件
$ ln -s libstdc++.so.6.0.21 libstdc++.so.6
# 查看最终的libstdc++.so库文件列表
$ 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
见4.2
##【参考】
1、gcc full list of versions :https://ftp.tsukuba.wide.ad.jp/software/gcc/releases/
2、报错信息ImportError: /lib64/libstdc++.so.6: version ‘CXXABI_1.3.9’ not found
https://www.cnblogs.com/jimlau/p/13263052.html。
3、解决/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14’ not found问题
https://blog.csdn.net/xiaolong2w/article/details/23915171
4、Fix the error: CXXABI 1.3.9 not found on CentOS 7 running DirectAdmin
https://azdigi.com/blog/en/webserver-panel-en/directadmin-en/fix-the-error-cxxabi-1-3-9-not-found-on-centos-7-running-directadmin/
5、Linux解决libstdc++的版本问题
https://blog.csdn.net/u013934914/article/details/104926415
6、libstdc++.so.6: version GLIBCXX_3.4.X 没有找到的解决办法
https://zhuanlan.zhihu.com/p/142718039
7、full version 对应关系:https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html
8、Atlas 900 PoD (Model 9000) 22.0.0 Cluster Delivery Guide
https://support.huawei.com/enterprise/en/doc/EDOC1100289998/326e1dc5/installing-gcc-730