CentOS 7.9 默认安装的 C++ 编译器是 GCC 4.8.5(具体版本为 gcc-4.8.5-44.el7)。
是否支持现代 C++ 特性?
部分支持,但非常有限。 GCC 4.8.5 是一个较老的编译器版本(发布于 2013 年),它对现代 C++ 标准的支持不完整:
✅ 支持较好的特性(C++11/14):
- 基本 C++11 特性:如
auto、nullptr、范围 for 循环、std::move、右值引用等。 - 部分 C++14 特性:如泛型 lambda、二进制字面量等。
std::thread、std::mutex等多线程支持基本可用。
❌ 不支持或支持不完整的特性(C++17/C++20):
- C++17:几乎完全不支持(如结构化绑定、
if constexpr、std::optional、std::variant、文件系统库等)。 - C++20:完全不支持(如 concepts、coroutines、ranges、modules 等)。
- 许多 C++17 和 C++20 的标准库组件缺失或存在 bug。
如何获取更现代的 C++ 编译器?
如果你需要更好的现代 C++ 支持,有以下几种常见方案:
1. 安装 devtoolset(推荐用于生产环境)
Red Hat / CentOS 提供 devtoolset 包,可以安装更新版本的 GCC 而无需替换系统默认编译器:
# 启用 EPEL 仓库
sudo yum install -y epel-release
# 安装 devtoolset-9(GCC 9.3,支持大部分 C++17)
sudo yum install -y devtoolset-9-gcc-c++
# 临时启用(当前 shell)
scl enable devtoolset-9 bash
# 验证版本
g++ --version
devtoolset-10(GCC 10.3)和devtoolset-11(GCC 11.3)也可用,支持更多 C++20 特性。
2. 使用第三方软件源(如 IUS、SCLo)
sudo yum install -y centos-release-scl
sudo yum install -y gcc-toolset-11-gcc-c++
3. 升级操作系统
CentOS 7 已于 2024 年 6 月 30 日停止维护(EOL)。强烈建议迁移到:
- Rocky Linux 9 或 AlmaLinux 9(GCC 11+,完整 C++20 支持)
- Ubuntu 22.04/24.04 LTS(GCC 11/13,C++20 支持良好)
- Debian 12(GCC 12,C++20 支持良好)
总结
| 项目 | 说明 |
|---|---|
| 默认编译器 | GCC 4.8.5 |
| 最佳支持标准 | C++11(部分 C++14) |
| C++17 支持 | 极差,多数特性缺失 |
| C++20 支持 | 几乎无支持 |
| 建议操作 | 使用 devtoolset 升级 GCC,或迁移到新 OS |
如果你的项目依赖 C++17 或更高版本,不建议在 CentOS 7.9 上使用默认编译器,应通过 devtoolset 或升级系统来解决。
云小栈