0%

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 版本不足:

1
2
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. 尝试升级

尝试一
1
sudo yum install gcc

然后显示4.8.5已是最新版本,我这是假的yum吗?

尝试二

那我安装整体工具包呢?

1
sudo yum groupinstall "Development Tools"

版本依然没变。

尝试三

更新下yum?

1
2
3
sudo yum update
# 然后在进行安装gcc
sudo yum install gcc

版本依然没变。

尝试四

好吧,那我指定版本总行了吧,我下载个9的

1
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 官方源可能存在访问缓慢或版本滞后问题,建议更换为阿里云镜像:

1
2
3
4
5
6
7
8
# 进入 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 源
1
2
# 安装 SCL 源包(会自动生成相关配置文件)
sudo yum install -y centos-release-scl
(2)修正 SCL 源地址

默认 SCL 源可能无法访问,需修改配置文件指向阿里云镜像:

1
2
# 编辑 sclo 源配置
vi CentOS-SCLo-scl.repo

修改 baseurl 为:

1
2
3
4
5
6
7
[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
1
2
# 编辑 sclo-rh 源配置
vi CentOS-SCLo-scl-rh.repo

修改 baseurl 为:

1
2
3
4
5
6
7
[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

1
2
3
4
5
6
7
8
# 清理 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)临时激活(当前会话有效)
1
scl enable devtoolset-9 bash
(2)验证版本
1
2
gcc --version
# 输出应显示 gcc (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2)
(3)永久激活(开机自动生效)

将激活命令添加到用户环境变量:

1
2
3
4
echo 'source scl_source enable devtoolset-9' >> ~/.bashrc

# 立即生效
source ~/.bashrc

常见问题与解决方案

1. 安装时提示 “Cannot find a valid baseurl”

  • 原因:SCL 源地址配置错误或网络不通。
  • 解决:重新检查 CentOS-SCLo-scl.repoCentOS-SCLo-scl-rh.repo 中的 baseurl 是否正确,确保网络可访问阿里云镜像。

2. 激活后版本未更新

  • 原因:未正确执行激活命令或环境变量未生效。
  • 解决:重新执行 scl enable devtoolset-9 bash,或通过 source ~/.bashrc 刷新环境变量。

3. 编译仍报错

  • 原因:可能存在其他依赖缺失(如 libstdc++ 版本过低)。

  • 解决:安装对应版本的依赖:

    1
    sudo yum install -y devtoolset-9-libstdc++-devel

欢迎关注我的其它发布渠道