linux上升级gcc/g++

Ubuntu

添加源,默认的稳定源里最新只有gcc8,如果需要更高的版本需要添加这个测试源,这一步不是必须做,可以先看看默认的源里是否已经有了你想要的版本

1
sudo add-apt-repository ppa:ubuntu-toolchain-r/test

更新软件列表

1
sudo apt-get update

安装想要升级的gcc/g++版本

1
sudo apt-get install gcc-9 g++-9

查看目前存在的版本

1
2
sudo updatedb && sudo ldconfig
locate gcc | grep -E "/usr/bin/gcc-[0-9]"

通过update-alternatives切换默认版本(本质是修改软连接,最后的数字是优先级,优先级高的自动为默认版本)

1
2
3
4
5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 50

现在就升级好了,可以通过命令查看

1
2
gcc --version
g++ --version

BTW:

之后可以随时通过

1
sudo update-alternatives --config gcc

手动切换默认版本

而删除一个版本使用下面的命令

1
sudo update-alternatives --remove gcc /usr/bin/gcc-9

CentOS

安装scl源

1
yum install -y centos-release-scl scl-utils-build

查看可以安装的gcc版本

1
yum list all --enablerepo='centos-sclo-rh' | grep gcc

安装 devtoolset-9

1
yum install -y devtoolset-9-gcc.x86_64 devtoolset-9-gcc-c++.x86_64 devtoolset-9-gcc-gdb-plugin.x86_64

开启一个指定gcc/g++版本的bash

1
scl enable devtoolset-9 bash

可以在/etc/profile 中加入,这样每次登录就自动切换到gcc-9的环境了

指定cmake时的gcc版本

执行cmake生成Makefile时,cmake会去发现系统上的gcc

我实际使用时,在centos上系统存在gcc时,通过

1
scl enable devtoolset-9 bash

切换gcc版本后,使用cmake生成Makefile会出现仍然使用系统默认gcc的情况

解决方式:切换gcc版本后指定CC和CXX环境变量指向需要使用的gcc和g++,再执行cmake

1
2
export CC=`which gcc`
export CXX=`which g++`