温馨提示×

centos如何降级gcc版本

小樊
38
2026-08-29 11:59:10
栏目: 智能运维

在 CentOS 上“降级”或切换 GCC 版本,强烈建议不要直接强行删除或覆盖系统自带的 GCC(如 CentOS 7 默认的 4.8.5),因为系统的 yum/dnf 以及部分底层库依赖于它。推荐的做法是多版本共存,按需切换

你可以根据自己的实际情况,选择以下一种方法来“降级”或切换 GCC。


方法一:如果你之前用 devtoolset (SCL) 升级过 GCC,想退回默认版本

在 CentOS 7 中,很多人通过安装 devtoolset-9 等来升级 GCC。其实这并没有替换系统自带的 GCC,只是开启了新的环境变量。

  1. 临时退回:只需关闭当前终端,重新打开一个新终端(不执行 scl enable 命令),gcc --version 就会变回系统默认版本(如 4.8.5)。
  2. 彻底卸载高版本 GCC(如果不需要了):
    sudo yum remove devtoolset-9-gcc devtoolset-9-gcc-c++
    

方法二:如果你通过源码编译安装并覆盖了 /usr/bin/gcc

如果你之前手动编译安装新版本 GCC 时,执行 make install 直接覆盖到了系统的 /usr/bin/gcc,现在想降级恢复:

  • 如果做过备份:直接把备份文件恢复回 /usr/bin/gcc
  • 如果没有备份:通过 yum 重新安装系统自带的 GCC 来覆盖你手动安装的版本:
    sudo yum reinstall gcc gcc-c++ gcc-gfortran
    
    执行完后,运行 gcc --version 检查,通常会恢复为系统仓库的默认版本。

方法三:通过 YUM/DNF 直接降级(适用于 CentOS 8 / Stream)

如果你在 CentOS 8 上通过 dnf 安装了高版本 GCC(比如 GCC 10 或 11),想降级到仓库中的另一个旧版本(如 GCC 8):

# 1. 查看仓库中可用的旧版本
dnf list available gcc --showduplicates

# 2. 使用 downgrade 降级到指定版本(请替换为你查到的实际版本号)
sudo dnf downgrade gcc-8.5.0-1.el8.x86_64 gcc-c++-8.5.0-1.el8.x86_64

方法四:多版本共存并切换(推荐的安全做法)

如果你需要使用某个特定的旧版本(例如 GCC 7),同时保留系统原有版本,建议使用 alternatives 工具管理,或者临时修改环境变量

方案 A:临时降级(最安全,仅当前终端有效)

如果你只是想编译某个特定的软件而临时使用旧版 GCC,只需在编译前指定 PATH:

# 假设你的旧版 GCC 安装在 /opt/gcc-7/bin/
export PATH=/opt/gcc-7/bin:$PATH

# 验证版本
gcc --version

关闭终端后,系统 GCC 自动恢复正常,不会影响全局。

方案 B:使用 alternatives 全局管理(适用于手动安装了多个版本)

如果你将旧版 GCC 编译安装到了 /opt/gcc-7,并希望可以和系统自带版本随时切换:

# 将系统自带的 GCC 加入 alternatives(CentOS 7 自带通常是 4.8.5,路径可能略有不同)
sudo alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8.5 100
sudo alternatives --install /usr/bin/g++ g++ /usr/bin/g++ 100

# 将你安装的旧版 GCC 加入 alternatives
sudo alternatives --install /usr/bin/gcc gcc /opt/gcc-7/bin/gcc 50
sudo alternatives --install /usr/bin/g++ g++ /opt/gcc-7/bin/g++ 50

# 手动选择使用哪个版本(输入对应数字即可)
sudo alternatives --config gcc
sudo alternatives --config g++

⚠️ 注意事项

  1. 标准库兼容:降级 GCC 时,系统的 libstdc++.so.6 动态库通常仍然较新(这通常没问题,老编译器能链接新标准库)。但如果你之前用高版本 GCC 编译过程序,降级后重新编译可能需要修改不兼容的新语法(如 C++17 特性在 GCC 4.8 中不支持)。
  2. 内核与驱动编译:如果你需要编译 Linux 内核模块或 NVIDIA 等专有驱动,请务必使用系统默认版本的 GCC,使用其他版本极容易导致编译失败或系统崩溃。
  3. CentOS 版本差异:CentOS 7 使用 devtoolset-N-gcc;CentOS 8 使用 gcc-toolset-N-gcc;使用第三方仓库前请确保已启用 epelcentos-release-scl

0