CentOS 7 升级 GCC 教程(以 GCC 9 为例)
发表于:2025-10-19 | 分类: IT
字数统计: 1.5k | 阅读时长: 6分钟 | 阅读量:

一、教程背景

CentOS 7 系统默认预装的 GCC 版本为 4.8.5(发布于 2015 年),而现代开发场景中,许多软件(如高版本 Python、TensorFlow、C++ 11+ 项目等)对 GCC 版本要求较高(需 5.4+ 及以上)。因此需升级 GCC,但直接覆盖系统默认 GCC 可能导致依赖冲突(如 yum 工具依赖旧版本)。

本教程采用 SCL(Software Collections)仓库 方式升级,可在不覆盖系统默认 GCC 的前提下,安装并使用高版本 GCC(以 GCC 9 为例,稳定且兼容性强),安全且灵活。

二、升级前准备

确保系统已联网,且拥有 root 权限(或使用 sudo 权限执行命令)。

三、详细升级步骤

1. 备份原有 YUM 源(关键:防止配置出错)

CentOS 7 停止官方维护后,默认 YUM 源可能失效,且后续需添加新仓库配置。先备份原有源文件,避免误操作后无法恢复:

1
2
3
4
# 创建备份目录
sudo mkdir -p /etc/yum.repos.d/backup
# 将所有 .repo 源文件移动到备份目录
sudo mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/

2. 添加 SCL 仓库配置文件(使用阿里云源)

SCL 仓库是升级 GCC 的核心,这里选择 阿里云 SCL 源(国内访问速度快,稳定性高),手动创建仓库配置文件:

1
2
# 用 vi 编辑器创建并编辑 centos-sclo-rh.repo 文件
sudo vi /etc/yum.repos.d/centos-sclo-rh.repo

打开编辑器后,按 i 进入编辑模式,完整复制以下内容(不要遗漏或修改格式):

1
2
3
4
5
6
[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-SIG-SCLo
enabled=1

复制完成后,按 Esc 退出编辑模式,输入 :wq 并回车(保存并退出 vi 编辑器)。

3. 清理 YUM 缓存并生成新缓存

新添加仓库后,需清理旧缓存、加载新仓库的包列表,确保后续安装能找到正确的软件包:

1
2
3
4
# 清理所有 YUM 缓存
sudo yum clean all &&
# 生成新的缓存(下载阿里云源的包列表)
sudo yum makecache

执行后耐心等待(时间取决于网络速度),若无报错则缓存生成成功。

4. (可选)安装 SCL 仓库基础包

多数情况下,步骤 2 添加的配置文件已足够,但若后续安装 GCC 时提示“仓库不存在”,可执行此步骤安装 SCL 仓库基础包:

1
sudo yum install -y centos-release-scl

5. 安装高版本 GCC(GCC 9)

通过 YUM 安装 devtoolset-9(对应 GCC 9 版本),并添加 --nogpgcheck 参数(跳过 GPG 密钥验证,因 CentOS 7 官方密钥源已失效,不影响包安全性):

1
sudo yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils --nogpgcheck
  • devtoolset-9-gcc:GCC 9 核心包
  • devtoolset-9-gcc-c++:C++ 编译组件(如需编译 C++ 项目必装)
  • devtoolset-9-binutils:二进制工具集(辅助编译)

执行后等待安装完成(约 50MB 下载量),无报错则安装成功。

6. 启用高版本 GCC

SCL 安装的 GCC 不会自动生效,需手动启用,支持 临时启用永久启用,根据需求选择:

方式 1:临时启用(仅当前终端有效)

适用于“临时使用高版本 GCC”的场景,关闭终端后恢复默认 GCC 4.8.5:

1
scl enable devtoolset-9 bash

方式 2:永久启用(推荐)

若需每次登录终端都自动使用 GCC 9,可将启用命令写入环境变量文件,分“当前用户”和“全局所有用户”两种场景:

场景 A:仅当前用户生效(推荐普通用户)
1
2
3
4
# 将启用命令写入当前用户的 .bashrc 文件
echo "source /opt/rh/devtoolset-9/enable" >> ~/.bashrc
# 立即生效(无需重启终端)
source ~/.bashrc
场景 B:全局所有用户生效(需 root 权限)

适用于多用户服务器,所有用户登录后均使用 GCC 9:

1
2
3
4
5
6
# 切换到 root 用户(若当前非 root)
su root
# 将启用命令写入全局环境变量文件 /etc/profile
echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile
# 立即生效
source /etc/profile

7. 验证 GCC 升级结果

执行以下命令查看当前 GCC 版本,确认是否升级成功:

1
gcc -v

若输出类似以下内容(版本号为 9.3.1 及以上),则说明升级成功:

1
2
3
4
5
6
7
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-9/root/usr --mandir=/opt/rh/devtoolset-9/root/usr/share/man --infodir=/opt/rh/devtoolset-9/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --with-default-libstdcxx-abi=gcc4-compatible --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-9.3.1-20200408/obj-x86_64-redhat-linux/isl-install --disable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 9.3.1 20200408 (Red Hat 9.3.1-2.2.el7) (GCC)

四、常见问题与注意事项

  1. 若需安装其他 GCC 版本
    本教程以 GCC 9 为例,若需安装 GCC 10,只需将命令中的 devtoolset-9 替换为 devtoolset-10(如 devtoolset-10-gcc),其他步骤一致。

  2. 系统默认 GCC 未被覆盖
    SCL 安装的 GCC 位于 /opt/rh/devtoolset-9/root/usr/bin/,系统默认 GCC(4.8.5)仍在 /usr/bin/gcc,若需临时使用旧版本,可直接执行 /usr/bin/gcc -v

  3. 安装时提示“无可用软件包”
    重新执行步骤 3(清理并生成缓存),或检查步骤 2 的仓库配置文件是否正确(确保 baseurl 未写错)。

五、总结

通过本教程,可在 CentOS 7 上安全升级 GCC 至 9 版本(或更高),满足现代软件开发需求,且不影响系统原有依赖。若后续需编译软件(如 Python、C++ 项目),直接使用 gccg++ 命令即可调用高版本工具。

加关注

关注公众号“生信之巅”。

生信之巅微信公众号 生信之巅小程序码
上一篇:
在Ubuntu中配置Python文字识别环境(基于Tesseract OCR)
下一篇:
What is RAG