ubuntu 20.04 lts 编译gcc12

这里默认你系统已经安装了gcc,没安装的运行下面的指令

$ sudo apt install -y build-essential

先准备编译环境

$ sudo apt install -y git libmpc-dev flex

git 可以从gcc官网代码仓库clone gcc源代码

$ git clone git://gcc.gnu.org/git/gcc.git gcc && pushd gcc/

配置编译环境

我是64bit环境需要使用 --disable-multilibx

$ ./configure --prefix=/usr/local/gcc12 --with-system-zlib --disable-multilib
$ make -j6 # 编译,很耗时
$ sudo make install # 安装到 /usr/local/gcc12 

/usr/local/gcc12/bin 下的可执行程序全都软链接到 /usr/bin/

$ sudo ln -sf /usr/local/gcc12/bin/gcc /usr/bin/gcc-12
$ sudo ln -sf /usr/local/gcc12/bin/g++ /usr/bin/g++-12
$ sudo ln -sf /usr/local/gcc12/bin/gcc-ar /usr/bin/gcc-ar-12
$ sudo ln -sf /usr/local/gcc12/bin/gcc-nm /usr/bin/gcc-nm-12
$ sudo ln -sf /usr/local/gcc12/bin/gcc-ranlib /usr/bin/gcc-ranlib-12
$ sudo ln -sf /usr/local/gcc12/bin/gcov /usr/bin/gcov-12
$ sudo ln -sf /usr/local/gcc12/bin/gcov-dump /usr/bin/gcov-dump-12
$ sudo ln -sf /usr/local/gcc12/bin/gcov-tool /usr/bin/gcov-tool-12

配置多版本GCC共存

因为系统中原来就有个gcc9,咱来配个多版本共存环境
以下命令为每个版本配置替代版本,并将优先级与之关联。auto mode版本是优先级最高的版本,在本例中配成 gcc-12

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 120 --slave /usr/bin/gcov gcov /usr/bin/gcov-12
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 120
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/gcov gcov /usr/bin/gcov-9
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 90

以后,如果要更改默认版本,请使用以下update-alternatives命令:

$ sudo update-alternatives --config gcc

There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path             Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gcc-12   120       auto mode
  1            /usr/bin/gcc-12   120       manual mode
  2            /usr/bin/gcc-9    90        manual mode

Press <enter> to keep the current choice[*], or type selection number: 

系统将为您提供Ubuntu系统上所有已安装的GCC版本的列表。输入您要用作默认版本的版本号,然后按Enter。
该命令将创建指向GCC和G ++特定版本的符号链接。