1、Configuring gcc installation dependencies

1.1 Installation of required software

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

1.2 Download the gcc package and extract it

#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 Configuration Dependencies

./contrib/download_prerequisites
#cd gcc-11.2.0

The message All prerequisites downloaded successfully.

If the download fails you can install the dependencies manually The dependency packages to be downloaded are listed below:

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

Download Url:: 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

Install gmp

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

Install mpfr

#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

Install mpc

#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

Install isl

#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、Install gcc

First create the gcc build directory

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

Adding Compilation Parameters

#../configure --prefix=/opt/gcc-11.2.0 \
--enable-checking=release \
--enable-languages=c,c++ \
--disable-multilib
/* Manual installation of dependency packages requires the path to be specified
--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
*/

Executed without error

make && make install

The process will be long and may take hours

3、Managing gcc with alternatives

Alternatives Usage: Determines the default commands used by the system by maintaining symbolic links, version selection, and service selection.

Backup the original gcc first

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

Using alternatives links

#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++

Use alternatives to select the system’s default gcc version

#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 # Enter the serial number here to select the gcc version

View the current gcc version

#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)

Not updating the library link typically reports the following error:

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

Two ways to update The first is simple and brutal

#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

Second addition

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

See which libraries are currently included

#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