在CentOS 7.9上编译C++17项目,建议使用以下GCC版本:
1. 最低要求版本
- GCC 7或更高版本(C++17标准完全支持的最低版本)
- CentOS 7.9默认的GCC版本是4.8.5,不支持C++17
2. 推荐解决方案
方案一:使用Devtoolset(推荐)
# 安装SCL(Software Collections)
sudo yum install centos-release-scl
# 安装devtoolset(选择其中一个)
sudo yum install devtoolset-9-gcc devtoolset-9-gcc-c++ # GCC 9.1
sudo yum install devtoolset-10-gcc devtoolset-10-gcc-c++ # GCC 10.2
sudo yum install devtoolset-11-gcc devtoolset-11-gcc-c++ # GCC 11.2
# 启用devtoolset
scl enable devtoolset-11 bash # 临时启用
# 或
source /opt/rh/devtoolset-11/enable # 在当前shell启用
方案二:编译安装最新GCC
# 安装依赖
sudo yum install gmp-devel mpfr-devel libmpc-devel
# 下载并编译GCC
wget https://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.gz
tar xf gcc-11.2.0.tar.gz
cd gcc-11.2.0
./configure --disable-multilib --enable-languages=c,c++
make -j$(nproc)
sudo make install
方案三:使用CMake指定编译器
# CMakeLists.txt中指定
set(CMAKE_C_COMPILER /opt/rh/devtoolset-11/root/usr/bin/gcc)
set(CMAKE_CXX_COMPILER /opt/rh/devtoolset-11/root/usr/bin/g++)
3. 版本对比
| 版本 | C++17支持度 | 获取方式 | 备注 |
|---|---|---|---|
| GCC 7+ | 完全支持 | devtoolset-7 | 最低要求 |
| GCC 9+ | 完全支持 | devtoolset-9 | 稳定推荐 |
| GCC 11+ | 完全支持 | devtoolset-11 | 最新特性 |
| GCC 13+ | 完全支持 | 源码编译 | 最新版本 |
4. 验证安装
# 检查GCC版本
gcc --version
# 检查C++17支持
g++ -std=c++17 -dM -E -x c++ /dev/null | grep __cplusplus
# 应该输出:__cplusplus 201703L
5. 永久设置(可选)
# 在~/.bashrc中添加
source /opt/rh/devtoolset-11/enable
推荐使用devtoolset-11,因为它提供了较新的GCC版本(11.2.1),完全支持C++17,且与系统默认GCC隔离,不会影响系统其他组件。
CLOUD技术笔记