在 CentOS 系统中,尤其是在注重稳定性的 CentOS 7 版本中,默认的软件仓库通常提供经过长期验证的软件版本,其默认的 GCC 编译器版本往往是 4.8.x,这在面对一些需要较新 C++11/14 特性或依赖特定编译器行为的旧项目时,可能会显得力不从心,在 CentOS 上安装 GCC 5.0 成为了一个常见的需求,主要用于兼容特定的遗留系统或复现特定的编译环境,本文将详细介绍两种在 CentOS 上安装 GCC 5.0(或接近版本如 5.3)的主流方法,并对它们进行比较分析。

使用软件集(推荐)
对于 CentOS 7 而言,最优雅、最安全且官方推荐的方式是使用 Software Collections (SCL),SCL 允许用户在不影响系统核心软件包的前提下,安装和使用多个版本的软件,这对于需要特定开发工具链的场景来说,是理想的解决方案。
启用 SCL 仓库
你需要安装 centos-release-scl 包来启用 SCL 仓库,打开终端,执行以下命令:
sudo yum install centos-release-scl
这个命令会配置你的 yum,使其能够访问包含各种软件集的仓库。
安装 Developer Toolset
包含 GCC 5.x 版本的软件集是 devtoolset-4,它提供了 GCC 5.3.1 版本,这是与 5.0 最接近且经过充分测试的稳定版本,执行安装命令:
sudo yum install devtoolset-4
此过程会下载并安装 GCC 5.3.1 以及相关的开发工具,如 gdb、make 等。
启用开发环境 安装完成后,GCC 5.3 并不会立即取代系统默认的 GCC 4.8,你需要手动启用它,每次需要使用新版本 GCC 时,可以在终端中运行:
scl enable devtoolset-4 bash
这个命令会启动一个新的 Bash shell 会话,在此会话中,环境变量(如 PATH 和 LD_LIBRARY_PATH)已被临时修改,gcc 命令将指向 /opt/rh/devtoolset-4/root/usr/bin/gcc。
验证安装 在启用的新 shell 中,验证 GCC 版本:

gcc --version
输出信息应显示为 gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6),证明安装和启用成功。
从源码编译(高级)
SCL 仓库不可用,或者你需要对 GCC 进行高度定制,那么从源码编译是最后的选择,这个过程非常耗时,且容易出错,仅建议有经验的用户操作。
安装编译依赖 编译 GCC 需要先安装一些基础工具和依赖库:
sudo yum groupinstall "Development Tools" sudo yum install gmp-devel mpfr-devel libmpc-devel isl-devel wget
下载和解压源码
从 GCC 官方镜像站下载所需版本的源码,gcc-5.5.0:
wget https://ftp.gnu.org/gnu/gcc/gcc-5.5.0/gcc-5.5.0.tar.gz tar -xzf gcc-5.5.0.tar.gz cd gcc-5.5.0
配置编译选项
为了避免覆盖系统默认的 GCC,务必使用 --prefix 指定一个安装目录,/usr/local/gcc5:
./configure --prefix=/usr/local/gcc5 --enable-languages=c,c++ --disable-multilib
编译和安装 这一步耗时最长,根据机器性能可能需要一到数小时:
make -j$(nproc) sudo make install
配置环境变量
编译安装后,将新 GCC 的 bin 目录添加到 PATH 环境变量中,可以编辑 ~/.bashrc 文件,在末尾添加:
export PATH=/usr/local/gcc5/bin:$PATH
然后执行 source ~/.bashrc 或重新登录使其生效。

方法对比
| 特性 | 方法一 (SCL) | 方法二 (源码编译) | 
|---|---|---|
| 易用性 | 非常简单,几条命令即可完成 | 复杂,步骤繁多,易出错 | 
| 安装时间 | 快速,取决于网络下载速度 | 极慢,需要数小时编译 | 
| 系统风险 | 低,与系统核心隔离 | 高,操作不当可能破坏系统 | 
| 灵活性 | 中等,版本受限于 SCL 仓库 | 高,可完全自定义编译选项 | 
| 维护性 | 好,可通过 yum 更新 | 
差,需要手动管理和更新 | 
相关问答 FAQs
Q1: 为什么我使用 scl enable devtoolset-4 bash 后,关闭终端再重新打开,gcc --version 又变回原来的版本了?
A1: 这是因为 scl enable 命令仅在当前执行的 shell 会话中临时修改了环境变量,当你关闭这个终端或开启一个新的会话时,环境变量会恢复为系统默认值,如果你希望每次登录时都自动使用 GCC 5.3,可以将启用命令添加到你的 shell 配置文件中(~/.bashrc 或 ~/.bash_profile),可以执行以下命令:
echo "source scl_source enable devtoolset-4" >> ~/.bashrc
之后,每次新的登录会话都会自动加载 Developer Toolset 4 的环境。
Q2: 我可以在 CentOS 8 或 CentOS Stream 上使用同样的 devtoolset-4 方法安装 GCC 5.0 吗?
A2: 不可以。devtoolset 是专门为 CentOS 7 设计的软件集,在 CentOS 8 及其后续版本(如 CentOS Stream)中,包管理器和软件源生态系统发生了变化,这些系统通常自带较新的 GCC 版本(如 GCC 8、9、11 等),如果确实需要在这些新系统上使用 GCC 5,推荐的做法是使用容器技术(如 Docker 或 Podman),创建一个基于 CentOS 7 并已安装好 devtoolset-4 的容器环境,这样既能获得所需的编译环境,又不会污染宿主系统,是目前更现代化和可移植的解决方案。