Centos7安装百度网盘/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found问题解决方法
问题描述
Centos7.9.2009环境,通过chrome下载百度网盘大文件需要安装百度网盘客户端,rpm -ivh baidunetdisk-3.5.0.x86_64.rpm 安装百度网盘后启动程序,报错/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found
排查解决
# 查看GLIBCXX,发现确实没有GLIBCXX_3.4.20
$ strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
# 查看系统gcc版本
$ gcc -v
#升级libstdc++
#查看提供方yum provides libstdc++.so.6
#安装yum install libstdc++-4.8.5-44.el7.x86_64 --setopt=protected_multilib=false
#发现升级依然不能解决问题
# 查找库文件
$ $ find / -name libstdc++.so.6.0.20
# 如果libstdc++.so.6.0.20库文件已存在,重置软链接即可(直接跳到最后步骤)
# 如果libstdc++.so.6.0.20库文件不存在,则需要先编译新版本的GCC,然后再创建软链接
编译新版本GCC
# 下载gcc可使用国内镜像源
wget http://mirrors.nju.edu.cn/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.gz
# 解压文件
$ tar -zxvf gcc-11.2.0.tar.gz
# 进入解压目录
$ cd gcc-11.2.0
# 安装编译环境,否则下一步编译安装的时候可能碰到“configure: error: ***A compiler with support for c++11 language features is required.”
$ yum install -y gcc gcc-c++
# 下载编译gcc所需的依赖文件和库
$ ./contrib/download_prerequisites
# 建立输出目录,用于存放编译时所有产生的中间文件
$ 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.29才是真正编译生成的库文件
$ find . -name "libstdc++.so*"
# 拷贝libstdc++.so.6.0.21库文件到lib64目录
$ cp ./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.29 /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*
验证
$ strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX