解决/usr/lib/libstdc++.so.6: version `GLIBCXX_3.x.x‘ not found问题


遇到这个问题的时候是在连接库的时候出现的问题,而且不是在编译的时候出现的,实在运行的时候才 报错,出现这种问题就是因为编译库的编译器和编译当前程序的编译器版本是不一样的,在具体一点就是因为,当前程序的编译器的版本是比较低或较高,只要调整一下就可以了。

1、查找缺少库版本

可以用如下命令查看一下当前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.

2、动态库版本与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 版本根据自己的需要进行选择。
对应关系地址:
https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html

对应版本的截图
在这里插入图片描述

3、查找 libstdc++.so.6.0.x 库文件

# 这里以一个为例
# 查找库文件
$ find / -name libstdc++.so.6.0.21
$ /lib/libstdc++.so.6.0.21

4、如果libstdc++.so.6.0.x库文件已存在,

如果libstdc++.so.6.0.21库文件已存在,则按照下面的步骤创建软链接即可

4.1 拷贝、软连接

$ 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 312 10:08 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.21
-rwxr-xr-x. 1 root root   991616 1030 14:39 /usr/lib64/libstdc++.so.6.0.19
-rwxr-xr-x. 1 root root 11485880 312 10:01 /usr/lib64/libstdc++.so.6.0.21

4.2验证新的 libstdc++.so.6.0.x 库文件是否生效

如果下面的输出结果中,出现 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

5、如果libstdc++.so.6.0.x库文件不存在

如果libstdc++.so.6.0.21库文件不存在,则需要按照下面的步骤编译新版本的GCC,然后再创建软链接

5.1 下载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

5.2 建立软连接

# 进入输出目录
$ 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 312 10:08 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.21
-rwxr-xr-x. 1 root root   991616 1030 14:39 /usr/lib64/libstdc++.so.6.0.19
-rwxr-xr-x. 1 root root 11485880 312 10:01 /usr/lib64/libstdc++.so.6.0.21

5.3 验证

见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

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
当出现/lib64/libstdc.so.6: version `CXXABI_1.3.9' not found错误时,这意味着需要找到一个包含CXXABI_1.3.9版本的libstdc.so.6库文件来解决这个问题。通过查看服务器上的文件系统,我们可以找到其他版本的libstdc.so.6库文件,但没有CXXABI_1.3.9版本。可以尝试以下解决思路来解决这个问题: 1. 在服务器上查找新的libstdc.so.6动态库文件。可以使用命令`find / -name 'libstdc.so'`来查找。如果找到了新的版本库文件,将其复制到/lib64目录下。这样,/lib64/libstdc.so.6就会与新的动态库文件关联起来。 2. 创建一个软链接,将/lib64/libstdc.so.6链接到新的库文件。这可以通过使用`ln -s`命令来完成。例如,如果新的库文件路径为/new/path/to/libstdc.so.6,那么可以使用以下命令创建软链接:`ln -s /new/path/to/libstdc.so.6 /lib64/libstdc.so.6`。 通过这些步骤,应该能够解决/lib64/libstdc.so.6: version `CXXABI_1.3.9' not found错误,并使得程序能够成功加载所需的库文件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [解决linux下出现/lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found问题](https://download.csdn.net/download/qq_34062266/12104654)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Rtidyverse包安装报错/lib64/libstdc++.so.6: version `CXXABI_1.3.9'](https://blog.csdn.net/yijiaobani/article/details/90234618)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值