加油
努力

在CentOS 7.9上编译C++17项目应该使用哪个GCC版本?

在 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 而不影响系统默认编译器。

步骤如下:

  1. 启用 SCL(Software Collections)仓库和 devtoolset

    sudo yum install centos-release-scl
    sudo yum install devtoolset-8-gcc devtoolset-8-gcc-c++

    如果你希望使用更新的版本,也可以安装 devtoolset-10devtoolset-11(取决于 CentOS 7 是否仍提供):

    sudo yum install devtoolset-10-gcc devtoolset-10-gcc-c++
  2. 启用新 GCC 环境(临时生效):

    scl enable devtoolset-8 bash
    # 或
    scl enable devtoolset-10 bash
  3. 验证版本

    gcc --version
    g++ --version
  4. 编译 C++17 项目

    g++ -std=c++17 your_source.cpp -o your_program

替代方案:从源码编译 GCC

如果 devtoolset 不可用或不满足需求,可以从 GNU GCC 官网 下载 GCC 8/9/10 源码自行编译。但这过程复杂、耗时较长,一般不推荐除非有特殊需求。


注意事项:

  • 不要替换系统默认 GCC,以免破坏依赖 GCC 的系统工具(如 yumpython 等)。
  • 如果使用 Docker 容器,可以直接基于包含新版 GCC 的基础镜像(如 centos:7 + devtoolset 或改用 almalinux:8 / rockylinux:8 等更新发行版)。
  • 对于新项目,强烈建议考虑迁移到 CentOS Stream 8/9AlmaLinux 8/9Rocky Linux 8/9Ubuntu 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。

云服务器