Centos7更新gcc
CentOS 7 升级 GCC 版本:从 4.8.5 到 9+ 的完整解决方案
在 CentOS 7 中编译高版本软件(如 Python 3.9+)时,常因系统默认 GCC 版本过低(4.8.5)导致编译失败。本文详细记录从问题排查到成功升级 GCC 的全过程,解决依赖冲突和源配置问题。
问题背景与原因分析
1. 编译报错的根源
编译 Python 3.9.2 时出现如下错误,核心原因是 GCC 版本不足:
SystemError: <built-in function compile> returned NULL without setting an error
generate-posix-vars failed
- Python 3.9+ 要求 GCC 5.0 及以上版本,而 CentOS 7 默认 GCC 为 4.8.5,无法满足编译需求。
2. 尝试升级
尝试一
sudo yum install gcc
然后显示4.8.5已是最新版本,我这是假的yum吗?
尝试二
那我安装整体工具包呢?
sudo yum groupinstall "Development Tools"
版本依然没变。
尝试三
更新下yum?
sudo yum update
然后在进行安装gcc
sudo yum install gcc
版本依然没变。
尝试四
好吧,那我指定版本总行了吧,我下载个9的
sudo yum install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
显示没有软件包
3. 直接升级失败的原因
- CentOS 7 官方仓库维护的 GCC 版本停留在 4.8.5,通过
yum install gcc无法获取更高版本。 - 第三方源配置不当或未启用,导致无法找到
devtoolset-9等高版本 GCC 包。
升级 GCC 的完整步骤
1. 备份并更换 YUM 源
CentOS 7 官方源可能存在访问缓慢或版本滞后问题,建议更换为阿里云镜像:
# 进入 YUM 配置目录
cd /etc/yum.repos.d
# 备份默认源
mv CentOS-Base.repo CentOS-Base.repo.backup
# 下载阿里云 Base 源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
2. 配置 SCL 软件源(关键步骤)
高版本 GCC 需通过 Software Collections (SCL) 源获取,该源提供了较新的开发工具包:
(1)安装 SCL 源
# 安装 SCL 源包(会自动生成相关配置文件)
sudo yum install -y centos-release-scl
(2)修正 SCL 源地址
默认 SCL 源可能无法访问,需修改配置文件指向阿里云镜像:
# 编辑 sclo 源配置
vi CentOS-SCLo-scl.repo
修改 baseurl 为:
[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/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
# 编辑 sclo-rh 源配置
vi CentOS-SCLo-scl-rh.repo
修改 baseurl 为:
[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/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
3. 清理缓存并安装 GCC 9
# 清理 YUM 缓存
sudo yum clean all
# 生成新的元数据缓存
sudo yum makecache
# 安装 GCC 9 及相关工具
sudo yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
4. 激活 GCC 9 环境
SCL 源安装的软件不会覆盖系统默认版本,需手动激活:
(1)临时激活(当前会话有效)
scl enable devtoolset-9 bash
(2)验证版本
gcc --version
# 输出应显示 gcc (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2)
(3)永久激活(开机自动生效)
将激活命令添加到用户环境变量:
echo 'source scl_source enable devtoolset-9' >> ~/.bashrc
# 立即生效
source ~/.bashrc
常见问题与解决方案
1. 安装时提示 “Cannot find a valid baseurl”
- 原因:SCL 源地址配置错误或网络不通。
- 解决:重新检查
CentOS-SCLo-scl.repo和CentOS-SCLo-scl-rh.repo中的baseurl是否正确,确保网络可访问阿里云镜像。
2. 激活后版本未更新
- 原因:未正确执行激活命令或环境变量未生效。
- 解决:重新执行
scl enable devtoolset-9 bash,或通过source ~/.bashrc刷新环境变量。
3. 编译仍报错
原因:可能存在其他依赖缺失(如
libstdc++版本过低)。解决:安装对应版本的依赖:
sudo yum install -y devtoolset-9-libstdc++-devel