CentOS7.6升级gcc版本

2026 年 01 月 20 日
1 次浏览
9013 字数

1. 前言

在进行一个 Python 项目开发时,需要使用 SQLAlchemy 这一 ORM(对象关系映射)库。SQLAlchemy 在某些异步环境下(如 gevent)会依赖 greenlet 协程库。greenlet 的安装通常涉及 C 扩展的编译,这要求系统具备较新版本的 GCC(GNU Compiler Collection)编译工具链。在 CentOS/RHEL 7.x 等发行版上,系统默认预装的 GCC(例如 4.8.5)版本过低,无法满足编译需求,因此产生了升级 GCC 的需求。

2. 升级 GCC 的两种主流方式

根据技术实践和社区经验,在 Linux 系统中升级 GCC 主要有两种主流的实现路径,二者在原理、适用场景和操作复杂度上存在显著差异,您可根据自身的系统环境、网络条件及具体需求进行选择。

2.1 方式一:通过源码编译安装

这是一种最基础、最通用的方法,适用于几乎所有 Linux 发行版。其核心逻辑是手动下载指定版本的 GCC 源码,连同其依赖库(如 GMP、MPFR、MPC、ISL)一同编译并安装到系统目录中。

2.1.1 主要流程

  1. 下载 GCC 源码:从 GNU 官方镜像站(如 http://ftp.gnu.org/gnu/gcc/ )下载所需版本的源码压缩包,例如 gcc-8.3.0.tar.gz 。
  2. 解压并准备依赖:解压源码包并进入目录。通常需要先安装 GMP、MPFR、MPC、ISL 等依赖库。最便捷的方法是执行源码包中的 ./contrib/download_prerequisites 脚本,它会自动下载并配置这些依赖。如果因网络问题脚本失败,则需要根据脚本内容手动下载指定版本的依赖包,解压到 GCC 源码目录下,并创建相应的软链接(例如 ln -sf gmp-6.1.0 gmp)。
  3. 配置与编译:建议在 GCC 源码目录外创建一个独立的  build  目录进行编译,以避免污染源码。在该  build  目录下执行配置命令,例如  …/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib ,然后使用  make -j4 (数字  4  代表并行编译的线程数,可根据系统 CPU 核心数调整以加快速度)进行编译,此过程可能耗时 40 分钟到数小时。
  4. 安装与验证:编译完成后,执行  sudo make install  进行安装。安装后,使用  gcc -v  命令验证新版本是否生效。

2.1.2 优缺点分析

  • 优点:可以自由选择任何已发布的 GCC 版本进行安装,完全不受发行版软件仓库的版本限制。
  • 缺点
  1. 过程繁琐:需要手动处理所有依赖,过程长,容易出错。
  2. 耗时极长:编译过程可能持续数小时。
  3. 无法共存:安装后直接覆盖系统原有的 GCC,难以回退或与旧版本共存。
  4. 潜在库冲突:源码编译安装的 GCC 其附带的  libstdc++.so.6  动态库可能与系统默认库版本不一致。如果未手动更新系统的动态链接库(如将  /usr/lib64/libstdc++.so.6  软链接指向新版本库),在运行依赖新版本 C++ 标准库的程序时,可能会遇到  GLIBCXX  版本未找到的错误,例如  GLIBCXX_3.4.20 not found 。

2.2 方式二:通过软件集(SCL/Devtoolset)安装

这是针对 CentOSRHEL 及其衍生系统(如 Rocky Linux)的推荐方法。它通过红帽官方维护的 Software Collections (SCL) 仓库来安装高版本的开发者工具集(Devtoolset),从而实现 GCC 的快速升级和多个版本共存。

2.2.1 主要流程

  1. 安装 SCL 仓库:首先执行  sudo yum install centos-release-scl  来启用 SCL 软件源。
  2. 安装指定版本的 Devtoolset:SCL 提供了多个版本的开发工具集,例如:
  • devtoolset-6  对应 GCC 6.3
  • devtoolset-7  对应 GCC 7.3
  • devtoolset-8  对应 GCC 8.3
  • devtoolset-9  对应 GCC 9.3 安装命令为  sudo yum install   devtoolset-7  -gcc devtoolset-7-gcc-c++   devtoolset-7  -binutils (以 devtoolset-7 为例)
  1. 启用新版本 GCC:安装后,新版本的 GCC 并不会直接覆盖系统默认版本,而是安装在  /opt/rh/  目录下。启用方法有两种:
  • 临时启用:在当前终端会话中执行 scl enable devtoolset-7 bash 启动一个新的 bash 子 shell,或执行**  source /opt/rh/devtoolset-7/enable 。退出当前 shell 后即恢复为系统原版本。
  • 永久启用:将  source /opt/rh/devtoolset-7/enable  添加到用户的  ~/.bashrc  或系统的  /etc/profile  文件中,这样每次打开终端都会自动启用高版本 GCC。
  1. 验证:启用后,使用  gcc -v  检查版本是否已切换。

2.2.2 优缺点分析

  • 优点
  1. 安装简便:通过包管理器自动解决所有依赖,安装速度快。
  2. 版本共存:支持多个 GCC 版本并存,可按需灵活切换,完全不影响系统原有软件。
  3. 环境隔离:工具集安装在  /opt/rh/  下,对系统整体环境影响小。
  • 缺点
  1. 版本受限:可选的 GCC 版本受 SCL 仓库更新的限制,通常无法获取到最新的上游版本。
  2. 平台依赖:此方法主要适用于 CentOS/RHEL 系列发行版,在其他发行版(如 Ubuntu/Debian)上不适用。

3. 通过软件集(SCL/Devtoolset)安装详细步骤与问题记录

在使用 Devtoolset 方法进行 GCC 升级的实际操作中,可能会遇到一些因系统环境或软件源导致的问题,以下为基于 CentOS 7.6 的详细操作步骤与问题解决记录。

3.1 安装 SCL 仓库

sudo yum install centos-release-scl

此命令用于安装并启用 SCL 软件源。

3.2 更新 SCL 软件源配置

由于 CentOS 7.6 官方源较旧,可能不包含所需的  devtoolset-9  等包,需要手动配置指向可用的仓库镜像。通常可以通过创建或修改以下两个仓库配置文件来实现:

# 创建并编辑第一个仓库文件 (scl)
sudo tee /etc/yum.repos.d/CentOS-SCLo-scl.repo << 'EOF'
[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=http://mirrors.cloud.aliyuncs.com/centos/7/sclo/$basearch/sclo/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
EOF

# 创建并编辑第二个仓库文件 (scl-rh) - 这个包含 devtoolset
sudo tee /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo << 'EOF'
[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=http://mirrors.cloud.aliyuncs.com/centos/7/sclo/$basearch/rh/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
EOF

重要说明:本例中使用了阿里云镜像的内网地址  mirrors.cloud.aliyuncs.com 。如果你是阿里云 ECS 用户,使用此地址访问速度更快且不产生公网流量。若需切换为普通的公网镜像,可将其改为  mirrors.aliyuncs.com 。

3.3 刷新 Yum 缓存并验证软件包

# 清除旧的缓存数据并重建缓存
sudo yum clean all
sudo yum makecache

# 针对性地搜索验证 centos-sclo-rh 仓库中的 devtoolset-9 相关包
sudo yum list available --disablerepo="*" --enablerepo="centos-sclo-rh" "devtoolset-9*"

如果命令执行成功并列出  devtoolset-9-gcc  等包,则证明仓库配置正确。

3.4 安装 Devtoolset-9

如果上一步验证成功,则可以执行安装:

sudo yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

3.5 激活与验证新版 GCC

安装完成后,可通过以下方式激活并使用新版本的 GCC 来编译 greenlet:

# 激活 devtoolset-9 环境
scl enable devtoolset-9 bash

# 验证 GCC 版本
gcc -v

# 此时,即可使用新版本的 gcc 编译 greenlet

若希望永久生效,可将  source /opt/rh/devtoolset-9/enable  添加到  ~/.bashrc  文件中。

4. 参考资料

  1. CentOS 7升级gcc,2025年无坑版 - 掘金
  2. CentOS7升级gcc版本【非常简单已解决】- CSDN博客
暂无标签