不同的gcc版本对C++的支持情况不一样,如下图所示:
C++版本 | GCC版本支持情况 | GCC版本 | 指定版本的命令标志 |
C++98 | 完全支持 | 是GCC 6.1之前版本的默认模式 | -std=c++98 or -std=gnu++98 |
C++11 | 完全支持 | 从GCC4.8.1版本开始完全支持 | -std=c++11 or -std=gnu++11 |
C++14 | 完全支持 | 从GCC 6.1版本开始完全支持,是GCC 6.1到GCC 10 (包括) 的默认模式 | -std=c++14 or -std=gnu++14 |
C++17 | 完全支持 | 从GCC 5版本开始,到GCC 7版本,已基本完全支持。 是GCC 11版本的默认模式 | -std=c++17 or -std=gnu++17 |
C++20 | 未完全支持 | 从GCC 8版本开始陆续支持C++20特性 | -std=c++20 or -std=gnu++20(GCC9及以前使用-std=c++2a) |
C++23 | 未完全支持(标准还在发展中) | 从GCC 11版本开始支持C++23特性 | -std=c++2b or -std=gnu++2b |
但是某些centos系统默认安装的gcc是低版本,比如centos7 默认的 gcc 是4.8.5,不完全支持C++14,会导致无法编译部分C++程序,所以我们得升级gcc。但是不要编译gcc!!! 之前我按照《linux升级gcc版本详细教程》的步骤,在make的时候,等待了12个小时也没有编译完成。
我们可以通过devtoolset来升级gcc。参考《CentOS7/完美升级gcc版本方法》。然后我们可以通过把/opt/rh/devtoolset-X/enable中的内容拷贝到/etc/bashrc 中,来激活该gcc。
升级完gcc后,如果我们想要在cmake中指定编译使用该gcc,则要在CMakeLists.txt 中添加如下语句:
SET(CMAKE_C_COMPILER "/opt/rh/devtoolset-X/root/usr/bin/gcc")
SET(CMAKE_CXX_COMPILER "/opt/rh/devtoolset-X/root/usr/bin/g++")