在 CentOS 7.9 上编译 C++17 项目,推荐使用 GCC 8 或更高版本。
原因分析:
- CentOS 7 默认 GCC 版本:系统自带的是 GCC 4.8.5,仅支持到 C++11(部分 C++14 特性),不支持完整的 C++17。
- C++17 要求:需要 GCC 7+(GCC 7 是第一个完整支持 C++17 的版本),但 GCC 8 及以上更稳定、兼容性更好,且修复了许多早期 C++17 实现的 bug。
推荐方案:使用 DevToolset(Red Hat/CentOS 官方推荐)
CentOS/RHEL 系列提供了 devtoolset 仓库,可以安装新版 GCC 而不影响系统默认编译器。
步骤如下:
-
启用 SCL(Software Collections)仓库和 devtoolset:
sudo yum install centos-release-scl sudo yum install devtoolset-8-gcc devtoolset-8-gcc-c++如果你希望使用更新的版本,也可以安装
devtoolset-10或devtoolset-11(取决于 CentOS 7 是否仍提供):sudo yum install devtoolset-10-gcc devtoolset-10-gcc-c++ -
启用新 GCC 环境(临时生效):
scl enable devtoolset-8 bash # 或 scl enable devtoolset-10 bash -
验证版本:
gcc --version g++ --version -
编译 C++17 项目:
g++ -std=c++17 your_source.cpp -o your_program
替代方案:从源码编译 GCC
如果 devtoolset 不可用或不满足需求,可以从 GNU GCC 官网 下载 GCC 8/9/10 源码自行编译。但这过程复杂、耗时较长,一般不推荐除非有特殊需求。
注意事项:
- 不要替换系统默认 GCC,以免破坏依赖 GCC 的系统工具(如
yum、python等)。 - 如果使用 Docker 容器,可以直接基于包含新版 GCC 的基础镜像(如
centos:7+devtoolset或改用almalinux:8/rockylinux:8等更新发行版)。 - 对于新项目,强烈建议考虑迁移到 CentOS Stream 8/9、AlmaLinux 8/9、Rocky Linux 8/9 或 Ubuntu 20.04+/22.04,这些系统默认提供 GCC 9+,原生支持 C++17/20。
总结:
| 目标 | 推荐 GCC 版本 | 安装方式 |
|---|---|---|
| 最低兼容 | GCC 7 | devtoolset-7 |
| 推荐 | GCC 8~10 | devtoolset-8/10 |
| 最新支持 | GCC 12+ | 需源码编译或使用新发行版 |
✅ 最佳实践:在 CentOS 7.9 上使用 devtoolset-10(或 devtoolset-8)获取 GCC 10 或 8,以稳定支持 C++17。
云小栈