1 Centos7的默认gcc版本与安装g++

Centos7默认安装了gcc,但是默认没有安装g++,

我们可以在命令行输入

g++

如果出现

-bash: g++: command not found

则说明没有安装g++,可以通过以下命令安装

yum install -y gcc gcc-c++

这个时候使用以下命令查看gcc和g++的版本

gcc --version
g++ --version
Centos7 – 安装高版本的gcc/g++,多版本切换以及配置环境-StubbornHuang Blog

gcc和g++的版本都为4.8.5,虽然GNU官方文档说GCC 4.8.1就是支持C++11第一个完整版本,不过经过这么多年的实测,C++11的一些版本在GCC 4.8.x这个大版本号支持的不是特别好,所以如果想完整使用C++11/C++14,这里建议使用GCC 10,因为从GCC 6.1到GCC 10(包含)的C++默认语言标准就是C++14,完整支持C++11,下面以在Centos7中安装GCC 10说明如何在Centos 7中安装高版本的gcc/g++编译器。

2 Centos 7安装高版本的gcc/g++

2.1 切换用户

如果当前用户不是root,则切换到root用户,使用以下命令

su -root

2.2 安装centos-release-sc

依次运行以下命令安装centos-release-scl

sudo yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/centos-release-scl-rh-2-3.el7.centos.noarch.rpm

sudo yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/centos-release-scl-2-3.el7.centos.noarch.rpm

2.3 安装对应版本的devtoolset

使用以下命令安装GCC 10

sudo yum install devtoolset-10-gcc-c++

如果要安装其他版本的GCC,则使用

# gcc/g++ 10,依次类推
sudo yum install devtoolset-10-gcc-c++ 

# gcc/g++ 9
sudo yum install devtoolset-9-gcc-c++

# gcc/g++ 8
sudo yum install devtoolset-8-gcc-c++

# gcc/g++ 7
sudo yum install devtoolset-7-gcc-c++

# gcc/g++ 6
sudo yum install devtoolset-6-gcc-c++

也可以安装多个版本的devtoolset,多个版本的devtooset可以共存,安装目录位于/opt/rh/devtoolset-*/目录下。

2.4 切换gcc/g++版本

安装完devtoolset后,比如安装的devtoolset-10-gcc-c++,则在/opt/rh/devtoolset-10/目录下有一个enable,我们可以有两种方式完成不同gcc版本的切换。

第1种方式

# *代表版本号
scl enable devtoolset-* bash 

比如是devtoolset-10-gcc-c++,则切换命令为

scl enable devtoolset-10 bash 

第2种方式

source /opt/rh/devtoolset-10/enable

使用上述两种命令之后是切换到对应的gcc/g++版本,我们可以使用

gcc --version
g++ --version
Centos7 – 安装高版本的gcc/g++,多版本切换以及配置环境-StubbornHuang Blog

查看当前gcc/g++版本是否为gcc10/g++10,如果是则说明版本切换成功,然后就可以使用高版本的gcc/g++编译代码了,不过上述两条命令只对当前的会话有效,如果重启系统或者退出会话,则gcc/g++版本则会回到默认的4.8.5版本,如果要永久性的指定默认的gcc、g++版本为高版本的gcc/g++版本,则使用下一个小节方法。

2.5 永久使用高版本的gcc/g++

旧版本gcc运行的在/usr/bin/gcc,所以将该目录下的gcc/g++替换为安装的新版本gcc软连接即可,依次执行以下命令

mv /usr/bin/gcc /usr/bin/gcc-4.8.5
ln -s /opt/rh/devtoolset-10/root/bin/gcc /usr/bin/gcc

mv /usr/bin/g++ /usr/bin/g++-4.8.5
ln -s /opt/rh/devtoolset-10/root/bin/g++ /usr/bin/g++

通过上面的两个命令可以永久的将gcc/g++版本切换为gcc10/g++10,即使系统重启也不会回到之前的4.8.5。

2.6 在CMake中使用高版本的gcc/g++

如果只是想在当前会话中让CMake使用高版本的gcc/g++,则在当前会话中使用

export CC=/opt/rh/devtoolset-10/root/bin/gcc
export CXX=/opt/rh/devtoolset-10/root/bin/g++

设置CC和CXX的环境变量。

如果想永久让CMake使用高版本的gcc/g++,则需要修改系统环境变量

nano /etc/profile

# 在/ect/profile增加下面两行
export CC=/opt/rh/devtoolset-10/root/bin/gcc
export CXX=/opt/rh/devtoolset-10/root/bin/g++

# 生效
source /etc/profile

我们也可在CMakeLists.txt中显式指定C和C++编译器,下面是无缓存版本

set(CMAKE_C_COMPILER /opt/rh/devtoolset-10/root/bin/gcc)
set(CMAKE_CXX_COMPILER /opt/rh/devtoolset-10/root/bin/g++)

下面是强制缓存版本

set(CMAKE_C_COMPILER /opt/rh/devtoolset-10/root/bin/gcc CACHE PATH "gcc" FORCE)
set(CMAKE_CXX_COMPILER /opt/rh/devtoolset-10/root/bin/g++ CACHE PATH "g++" FORCE)

参考