centos上安装gcc应按需求选择:仅基础编译用系统自带development tools;需c++17/20支持则centos 7用scl devtoolset-9,centos 8+/9用powertools/crb启用gcc-toolset-11,避免手动编译引发abi冲突。

gcc 在 CentOS 7 是 4.8.5,在 CentOS 8 是 8.3.1——前者连 std::optional 都不支持,后者勉强支持部分 C++17,但很多项目仍会报错。
所以别直接 yum install gcc 就完事,得先判断你的真实需求。
CentOS 7 安装基础 GCC(够编译简单 C 程序)
如果你只是跑个 hello.c 或编译老项目,系统自带的 Development Tools 组最省事,它包含 gcc、g++、make 等必需工具:
yum groupinstall "Development Tools"- 验证:
gcc --version应输出类似gcc (GCC) 4.8.5 - 注意:这个版本不带
libstdc++的新版 ABI,链接 C++11 以上代码时可能遇到GLIBCXX_3.4.21 not found
CentOS 7 升级到 GCC 9(推荐用于 C++17/20 项目)
官方不提供高版本 GCC,必须走 SCL(Software Collections)。这是 Red Hat 官方维护的多版本共存方案,安全、可回滚、不影响系统默认工具链:
- 启用 SCL 仓库:
yum install centos-release-scl -y - 安装 devtoolset-9:
yum install devtoolset-9 -y - 临时启用:
scl enable devtoolset-9 bash(当前终端生效) - 永久启用:往
~/.bashrc追加source /opt/rh/devtoolset-9/enable,再source ~/.bashrc - 验证:
gcc --version应显示9.x.x;strings /opt/rh/devtoolset-9/root/usr/lib64/libstdc++.so.6 | grep GLIBCXX能看到GLIBCXX_3.4.26及以上
CentOS 8/9 直接装 GCC 11+(用 dnf + PowerTools)
CentOS 8+ 默认源已更新,但高版本 GCC 不在 base repo,需启用 PowerTools(或 CRB):
- 启用扩展源:
dnf config-manager --set-enabled powertools(CentOS 8)或dnf config-manager --set-enabled crb(CentOS 9) - 安装:
dnf install gcc-toolset-11-gcc gcc-toolset-11-gcc-c++ - 启用:
scl enable gcc-toolset-11 bash(路径和命令名与 CentOS 7 不同,注意别照搬devtoolset-9) - 注意:
gcc-toolset-11的gcc命令不在$PATH顶层,必须通过scl启动新 shell,否则which gcc还是系统默认版本
别手动编译 GCC,除非你清楚后果
从源码编译 gcc 看似“最可控”,实际踩坑最多:
- 依赖极多:
gmp-devel、mpfr-devel、libmpc-devel缺一不可,版本不匹配直接 configure 失败 -
make -j$(nproc)编译常因内存不足中断(尤其 8GB 以下机器),make install后还得手动改LD_LIBRARY_PATH和PATH - 升级后
libstdc++.so.6版本冲突,可能导致yum、systemd等系统命令异常(因为它们依赖旧 ABI) - 卸载困难:没有 rpm 包管理,只能 rm -rf,容易残留或误删
libstdc++ 和 ABI 版本。SCL 方案把整个工具链隔离在独立前缀下,是最小风险的选择。如果项目 CI 里写了 gcc --version 检查,记得在构建脚本开头加 scl enable,否则 Jenkins 或 GitHub Actions 里还是跑默认 4.8.5。











