CentOS7升级GCC版本

在安装某些软件时,可能需要高版本的gcc以及glibc。通常我们使用的服务器操作系统版本较低,无法满足特定软件对glibc的需求。本文整理记录了在CentOS7上使用root权限安装高版本gcc的方法:

此处使用的是RedHat提供的Developer Toolset,无需手动下载源码进行编译,也不会破坏系统自带的环境。

devtoolset对应gcc的版本

1
2
3
4
5
6
7
devtoolset-3对应gcc4.x.x版本
devtoolset-4对应gcc5.x.x版本
devtoolset-6对应gcc6.x.x版本
devtoolset-7对应gcc7.x.x版本
devtoolset-8对应gcc8.x.x版本
devtoolset-9对应gcc9.x.x版本
devtoolset-10对应gcc10.x.x版本

安装

1
2
yum -y install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-gcc-gfortran devtoolset-8-binutils  # 安装gcc g++ gfortran 
yum list available devtoolset-8-\* # 查看所有包

完成之后,会安装到 /opt/rh/devtoolset-8/路径中。后续可以通过source /opt/rh/devtoolset-8/enable命令激活gcc。

解决报错

很有可能会出现relocation error: /lib64/libpthread.so.0: symbol __libc...的报错,原因是升级过程中删除了部分软链接。 此时大多数命令无法使用了,但是sln命令还可以使用,创建相应的软链接即可:

1
2
sln /usr/lib64/libc-2.28.so /lib64/libc.so.6
sln /usr/lib64/ld-2.28.so /usr/lib64/ld-linux-x86-64.so.2

离线安装

对于未联网的计算节点,可以离线安装(需要root权限):

1
2
yum -y install --downloadonly --downloaddir=devtoolset-9 devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils   # 仅下载,不安装(下载节点与后续安装节点的系统版本应当相同)
rpm -Uvh *.rpm # 在安装节点的对应文件夹中进行安装


References: