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的环境了

方法二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 安装基础的GCC环境和WGET,是后面通过源码编译安装高版本GCC的基础
yum update
yum -y groupinstall "Development Tools"
yum -y install wget
yum -y install glibc-static libstdc++-static

# 下载GCC 9.3.0
wget https://ftp.gnu.org/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz
# 解压缩
tar -xf gcc-9.3.0.tar.gz
cd gcc-9.3.0
# 检查并安装前置依赖
./contrib/download_prerequisites
# 创建并进入构建目录
mkdir build && cd build
# 配置编译选项
../configure --prefix=/usr/local/gcc-9.3.0 --enable-languages=c,c++ --disable-multilib
# 开始编译,使用所有可用的CPU核心以加快速度
make -j$(nproc)
# 安装到系统
sudo make install
1
2
3
4
5
6
# 通过which确认当前使用的gcc和g++
which gcc
ls -la `which gcc`
which g++
ls -la `which g++`
# 有必要的话调整gcc和g++的软连接

指定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++`