Centos 7 GCC编译安装最新版本

1、配置gcc安装依赖环境

1.1 安装所需软件

1
#yum install -y gcc gcc-c++ gmp-devel bzip2

1.2 下载gcc包并解压

1
2
#wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-11.2.0/gcc-11.2.0.tar.gz
# tar -xvf gcc-11.2.0.tar.gz

1.3 配置依赖性

1
2
#cd gcc-11.2.0
#./contrib/download_prerequisites

下载成功则提示All prerequisites downloaded successfully.

如下载失败可以手动安装依赖环境
需要下载的依赖包如下:

  • gmp-6.1.0.tar.bz2
  • mpfr-3.1.6.tar.bz2
  • mpc-1.0.3.tar.gz
  • isl-0.18.tar.bz2

下载地址:
https://ftp.gnu.org/gnu/gmp/gmp-6.1.0.tar.bz2
https://ftp.gnu.org/gnu/mpfr/mpfr-3.1.6.tar.bz2
https://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2

安装gmp

1
2
3
#cd gmp-6.1.0
#./configure --prefix=/usr/local/related/gmp-6.1.0
#make && make install

安装mpfr

1
2
3
#cd mpfr-3.1.6
#./configure --prefix=/usr/local/related/mpfr-3.1.6 --with-gmp=/usr/local/related/gmp-6.1.0
#make && make install

安装mpc

1
2
3
4
5
#cd mpc-1.0.3
#./configure --prefix=/usr/local/related/mpc-1.0.3 \
--with-gmp=/usr/local/related/gmp-6.1.0 \
--with-mpfr=/usr/local/related/mpfr-3.1.6
#make && make install

安装isl

1
2
3
#cd isl-0.18
#./configure --prefix=/usr/local/related/isl-0.18 --with-gmp=/usr/local/related/gmp-6.1.0
#make && make install

2、安装gcc

先创建gcc构建目录

1
#cd gcc-11.2.0 && mkdir build && cd build

添加编译参数

1
2
3
4
5
6
7
8
9
10
#../configure --prefix=/opt/gcc-11.2.0 \
--enable-checking=release \
--enable-languages=c,c++ \
--disable-multilib

/* 手动安装依赖包需要指定路径
--with-gmp=/usr/local/related/gmp-6.1.0 \
--with-mpfr=/usr/local/related/mpfr-3.1.6 \
--with-mpc=/usr/local/related/mpc-1.0.3
*/

执行无误后执行

1
make && make install

过程会很漫长,可能需要几个小时

3、使用alternatives管理gcc

alternatives用途:通过维护符号链接,版本选择,服务选择,来确定系统默认使用的命令
先备份原gcc

1
2
#mv /usr/bin/gcc /usr/bin/gcc-4.8.5
#mv /usr/bin/g++ /usr/bin/g++-4.8.5

使用alternatives链接

1
2
#alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8.5 88 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8.5
#alternatives --install /usr/bin/gcc gcc /opt/gcc-10.2.0/bin/x86_64-pc-linux-gnu-gcc 99 --slave /usr/bin/g++ g++ /opt/gcc-10.2.0/bin/x86_64-pc-linux-gnu-g++

使用alternatives选择系统默认gcc版本

1
2
3
4
5
6
7
8
9
10
#alternatives --config gcc

There are 2 programs which provide 'gcc'.

Selection Command
-----------------------------------------------
1 /usr/bin/gcc-4.8.5
*+ 2 /opt/gcc-11.2.0/bin/x86_64-pc-linux-gnu-gcc

Enter to keep the current selection[+], or type selection number: 2 //此处输入序号选择gcc版本

查看当前gcc版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/gcc-11.2.0/libexec/gcc/x86_64-pc-linux-gnu/11.2.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../configure --prefix=/opt/gcc-11.2.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 11.2.0 (GCC)

#g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/opt/gcc-11.2.0/libexec/gcc/x86_64-pc-linux-gnu/11.2.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../configure --prefix=/opt/gcc-11.2.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 11.2.0 (GCC)

4、更新库链接

不更新库链接一般会报以下错误:

1
2
/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.21' not found
/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.22' not found

两种方式更新
第一种简单粗暴

1
2
3
#find / -name libstdc++.so.6
#rm -rf /usr/lib64/libstdc++.so.6
#ln -s /opt/gcc-11.2.0/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6

第二种新增

1
2
#echo "/opt/gcc-11.2.0/lib64" >> /etc/ld.so.conf
#ldconfig

查看目前包含哪些库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#strings /usr/lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_3.4.29