CentOS7升级gcc/gcc-c++
升级前需要知道自己需要的gcc版本,根据自己的需要进行升级。
gcc版本和C++的对应关系可以参看gcc官网提供的对照表:https://gcc.gnu.org/projects/cxx-status.html
gcc官网地址:GCC, the GNU Compiler Collection - GNU Project
gcc源码下载地址:Index of /gnu/gcc
(1).实验环境
4核8G CentOS7.9.2009
配置了阿里云yum源和阿里云epel源,关闭防火墙,关闭SELinux。
(2).yum升级(推荐)
CentOS7已于2024年6月30日停止维护,导致官方的软件源(mirrorlist.centos.org)无法访问,所以我们要更换国内的镜像源(例如阿里云或清华源)。
我这里使用阿里云的SCL仓库。
[root@localhost ~]# cd /etc/yum.repos.d/ # 如果有SCL的yum源,则备份原文件(以防万一) [root@localhost yum.repos.d]# mv CentOS-SCLo-scl.repo CentOS-SCLo-scl.repo.bak 2>/dev/null [root@localhost yum.repos.d]# mv CentOS-SCLo-scl-rh.repo CentOS-SCLo-scl-rh.repo.bak 2>/dev/null #创建指向阿里云的SCL的yum源文件 [root@localhost yum.repos.d]# vim CentOS-SCLo-scl.repo [centos-sclo-sclo] name=CentOS-7 - SCLo sclo baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/sclo/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo [root@localhost yum.repos.d]# vim CentOS-SCLo-scl-rh.repo [centos-sclo-rh] name=CentOS-7 - SCLo rh baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo #下载GPG密钥,这个是官网地址 [root@localhost yum.repos.d]# curl -o /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo https://www.centos.org/keys/RPM-GPG-KEY-CentOS-SIG-SCLo #导入密钥到RPM库 [root@localhost yum.repos.d]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo #清除缓存并重新加载 [root@localhost yum.repos.d]# yum clean all [root@localhost yum.repos.d]# yum makecache
yum安装前可以看下阿里云的SCL仓库支持版本:https://mirrors.aliyun.com/centos/7/sclo/x86_64/,gcc就支持devtoolset-7~devtoolset-11版本。
#安装devtoolset-11版的gcc和gcc-c++ [root@localhost yum.repos.d]# yum -y install devtoolset-11-gcc devtoolset-11-gcc-c++
此时还需要激活,否则gcc和gcc-c++还是使用的老版本
[root@localhost yum.repos.d]# gcc --version gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. [root@localhost yum.repos.d]# g++ --version g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. #临时激活devtoolset-11软件集合,一旦重启就会失效 #也可以用source /opt/rh/devtoolset-11/enable来进行激活,这个命令写入环境变量就可以持久化 [root@localhost yum.repos.d]# scl enable devtoolset-11 bash [root@localhost yum.repos.d]# gcc --version gcc (GCC) 11.2.1 20220127 (Red Hat 11.2.1-9) Copyright (C) 2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. [root@localhost yum.repos.d]# g++ --version g++ (GCC) 11.2.1 20220127 (Red Hat 11.2.1-9) Copyright (C) 2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
持久化激活
[root@localhost yum.repos.d]# echo "source /opt/rh/devtoolset-11/enable" >> /etc/profile
(3).源码编译升级
源码编译安装时,gcc的依赖可以在源码目录下的contrib/download_prerequisites查看并使用该脚本进行下载(./contrib/download_prerequisites),并且可以统一在Index of /pub/gcc/infrastructure下载。其中gmp、mpfr、mpc也可以在Index of /gnu进行下载。不要低于要求的版本。我这里展示的是gcc-15.2.0版本的依赖要求:

如果低于gcc11,还是建议用yum安装,如果要安装gcc11.3.0及以上版本,再使用源码编译安装。因为gcc高版本编译时需要的C++版本会比较高,而CentOS7在不使用SCL仓库的情况下,gcc的版本最多只能到4.8.5,对应到C++版本就是C++11。所以要先yum安装高版本的gcc和gcc-c++,否则连编译都无法完成。这个直接看上面,但不要永久激活,只临时激活使用一下。源码包编译完成后可以直接迁移至相同环境。
1、安装依赖包
[root@localhost ~]# yum -y groupinstall "Development Tools"
2、编译安装gcc
[root@localhost ~]# tar xvf gcc-15.2.0.tar.xz [root@localhost ~]# cd gcc-15.2.0 #你可以将下载好的依赖包放入gcc-15.2.0目录,并逐个解压 #也可以直接用./contrib/download_prerequisites,让gcc脚本自动下载 #下载时间稍微有点长,我这里将下载好的安装包放入并解压,然后重命名 [root@localhost gcc-15.2.0]# tar xvf gmp-6.3.0.tar.xz [root@localhost gcc-15.2.0]# mv gmp-6.3.0 gmp [root@localhost gcc-15.2.0]# tar xvf mpfr-4.2.2.tar.xz [root@localhost gcc-15.2.0]# mv mpfr-4.2.2 mpfr [root@localhost gcc-15.2.0]# tar zxvf mpc-1.3.1.tar.gz [root@localhost gcc-15.2.0]# mv mpc-1.3.1 mpc [root@localhost gcc-15.2.0]# tar jxvf isl-0.24.tar.bz2 [root@localhost gcc-15.2.0]# mv isl-0.24 isl [root@localhost gcc-15.2.0]# tar xvf gettext-0.22.tar.gz [root@localhost gcc-15.2.0]# mv gettext-0.22 gettext [root@localhost gcc-15.2.0]# mkdir tmp && cd tmp #理论上来说这一步写为/usr会直接覆盖原本的gcc,但最好不要这么做,保持多版本共存 [root@localhost tmp]# ../configure --prefix=/usr/local/gcc-15.2.0 --enable-language=c,c++,java --disable-multilib [root@localhost tmp]# echo $? 0 #编译时间会相当长,耐心等待 [root@localhost tmp]# make -j$(nproc) [root@localhost tmp]# echo $? 0 [root@localhost tmp]# make install [root@localhost tmp]# echo $? 0
3、配置环境变量
重新开一个窗口,或者重启服务器,让devtoolset-11失效。如果在使用时能指定gcc的目录,直接指定最好。以下环境变量根据yum安装的/opt/rh/devtoolset-11/enable文件解析而来。(已使用gcc-11.5.0版本安装Ruby4.0.1验证)
[root@localhost ~]# echo "export PATH=/usr/local/gcc-15.2.0/bin${PATH:+:${PATH}}" >> /etc/profile
[root@localhost ~]# echo "export MANPATH=/usr/local/gcc-15.2.0/share/man${MANPATH:+:${MANPATH}}" >> /etc/profile
[root@localhost ~]# echo "export INFOPATH=/usr/local/gcc-15.2.0/share/info${INFOPATH:+:${INFOPATH}}" >> /etc/profile
[root@localhost ~]# echo "export LD_LIBRARY_PATH=/usr/local/gcc-15.2.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}" >> /etc/profile
[root@localhost ~]# echo "export PKG_CONFIG_PATH=/usr/local/gcc-15.2.0/lib64/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}" >> /etc/profile
[root@localhost ~]# source /etc/profile
参考:https://blog.csdn.net/whc18858/article/details/135484071

浙公网安备 33010602011771号