前言:
- centos7, ubuntu-18.04等已经EOL的系统已经不推荐用了,但是由于之前做的本地服务器一直用的是centos-7.9,稳定运行5年了,就不去换系统了
- 以下仅为个人环境下的记录,仅供参考,勿照抄使用
- 对于大多数不熟悉linux的用户,可以把这里的流程作为最佳实践,因为我写的方案本身就是企业级的解决方案和规划,基本都是基于官方文档的思路
- gcc版本可以自己去仓库中选择,能成功编译下来即可,无相应开发需求就无需纠结哪个版本
参考链接:
本次目的用来解决类似这样的问题:
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found
/lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
也就是系统自带的 libstdc++ 版本过低
## 查看当前可用的 GLIBCXX 版本
strings /usr/lib64/libstdc++.so.6 | grep ^GLIBCXX
解决:编译安装高版本gcc
(潜在问题:产生的文件数量是巨量的 13W+,编译耗时特别长 6核6线程也需要1小时以上)
## 可选:安装编译要用的依赖
yum install texinfo
GCC_VERSION=10.5.0
cd /data-nas/linux/files/download
wget https://mirrors.aliyun.com/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.gz
tar -zxf gcc-${GCC_VERSION}.tar.gz
mv gcc-${GCC_VERSION} /data-nas/linux/software/_installation_dir/
cd /data-nas/linux/software/_installation_dir/gcc-${GCC_VERSION}
# 这里就是下载4个软件压缩包,国内没找到合适的镜像,可以开代理下载
./contrib/download_prerequisites
mkdir build && cd build
../configure --prefix=/data-nas/linux/software/gcc-${GCC_VERSION} --disable-multilib --enable-languages=all
make -j6
make install
# 最好顺手删掉编译的目录,文件数量太庞大了
rm -rf /data-nas/linux/software/_installation_dir/gcc-${GCC_VERSION}
由于gcc的bin和动态库等文件数量都比较多,而且可能会切换不同版本的gcc,因此本次不考虑做软链到_shortcut,而是直接添加环境变量,编辑 /etc/profile,添加内容如下:
## gcc PATH
GCC_VERSION=10.5.0
PATH=/data-nas/linux/software/gcc-${GCC_VERSION}/bin:$PATH
CPATH=/data-nas/linux/software/gcc-${GCC_VERSION}/include:$CPATH
LIBRARY_PATH=/data-nas/linux/software/gcc-${GCC_VERSION}/lib64:/data-nas/linux/software/gcc-${GCC_VERSION}/lib:$LIBRARY_PATH
LD_LIBRARY_PATH=$LIBRARY_PATH
MANPATH=/data-nas/linux/software/gcc-${GCC_VERSION}/share/man:$MANPATH
unset GCC_VERSION
export PATH CPATH LIBRARY_PATH LD_LIBRARY_PATH MANPATH
验证安装:
gcc --version
centos-release-scl(解决不了缺少动态库的问题)
参考链接:
yum install -y centos-release-scl
安装后在 /etc/yum.repos.d 多2个repo文件,但是已经过期了,因此本次将其改为 中科大的SCL yum源:
https://mirrors.ustc.edu.cn/centos-vault/centos/7/sclo/
将2个repo文件改为如下:
CentOS-SCLo-scl-rh.repo
[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos/7/sclo/$basearch/rh/
#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-rh
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
[centos-sclo-rh-testing]
name=CentOS-7 - SCLo rh Testing
baseurl=http://buildlogs.centos.org/centos/7/sclo/$basearch/rh/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
[centos-sclo-rh-source]
name=CentOS-7 - SCLo rh Sources
baseurl=http://vault.centos.org/centos/7/sclo/Source/rh/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
[centos-sclo-rh-debuginfo]
name=CentOS-7 - SCLo rh Debuginfo
baseurl=http://debuginfo.centos.org/centos/7/sclo/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
CentOS-SCLo-scl.repo
[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos/7/sclo/$basearch/sclo/
#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-sclo
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
[centos-sclo-sclo-testing]
name=CentOS-7 - SCLo sclo Testing
baseurl=http://buildlogs.centos.org/centos/7/sclo/$basearch/sclo/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
[centos-sclo-sclo-source]
name=CentOS-7 - SCLo sclo Sources
baseurl=http://vault.centos.org/centos/7/sclo/Source/sclo/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
[centos-sclo-sclo-debuginfo]
name=CentOS-7 - SCLo sclo Debuginfo
baseurl=http://debuginfo.centos.org/centos/7/sclo/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
配置完后,刷新缓存,然后安装:
yum makecache
## 查看有哪些版本
yum list available devtoolset-*
## 可以多安装几个版本
yum install devtoolset-11
yum install devtoolset-8

用法:
仅在当前shell中启用:
scl enable devtoolset-8 bash
gcc --version
每次登录shell都生效,那就往 ~/.bash_profile 中添加内容:
source /opt/rh/devtoolset-8/enable
删除:
yum remove devtoolset-8*
rm -rf /opt/rh/devtoolset-8