Copyright © 2015 Free Software Foundation, Inc.
[root@localhost ~]#
下载新版GCC并安装(其它版本GCC下载地址:https://mirrors.aliyun.com/gnu/gcc/)
[root@localhost src]# wget https://mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-12.2.0/gcc-12.2.0.tar.gz
[root@localhost src]# tar -xf gcc-12.2.0.tar.gz && cd gcc-12.2.0
[root@localhost gcc-12.2.0]# ./contrib/download_prerequisites # 下载依赖软件
2023-06-12 19:10:51 URL:http://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.2.1.tar.bz2 [2493916/2493916] -> "gmp-6.2.1.tar.bz2" [1]
2023-06-12 19:10:54 URL:http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-4.1.0.tar.bz2 [1747243/1747243] -> "mpfr-4.1.0.tar.bz2" [1]
2023-06-12 19:10:56 URL:http://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.2.1.tar.gz [838731/838731] -> "mpc-1.2.1.tar.gz" [1]
2023-06-12 19:10:59 URL:http://gcc.gnu.org/pub/gcc/infrastructure/isl-0.24.tar.bz2 [2261594/2261594] -> "isl-0.24.tar.bz2" [1]
gmp-6.2.1.tar.bz2: 确定
mpfr-4.1.0.tar.bz2: 确定
mpc-1.2.1.tar.gz: 确定
isl-0.24.tar.bz2: 确定
All prerequisites downloaded successfully.
[root@localhost gcc-12.2.0]# mkdir build && cd build
[root@localhost build]# ../configure --prefix=/program/gcc-12.2.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib
[root@localhost build]# make -j$(nproc) # make操作非常耗时,请耐心等待 _(:з」∠)_
[root@localhost build]# make install
说明①:-j$(nproc)里的$(nproc)为CPU核心数,也可以手动指定,如:-j2、-j4、-j8、……,在多核CPU的机器上使用该参数可以大大加快编译速度,所以强烈建议使用全部核心来编译。需要注意的是并非所有软件都支持多核心并行编译,如果出现编译失败就将该参数删除再重新编译。
说明②:如果编译安装失败可以尝试安装scl和devtoolset,临时启用较新版本GCC来编译安装更新版本GCC(如临时启用GCC-8安装GCC-14)。
备份旧版相关文件,然后用新版覆盖旧版(通过软链接方式)
[root@localhost ~]# cp /usr/bin/gcc /usr/bin/gcc.default && \
mv /usr/bin/gcc /usr/bin/gcc.bak && \
ln -s /program/gcc-12.2.0/bin/gcc /usr/bin/gcc
[root@localhost ~]# cp /usr/bin/g++ /usr/bin/g++.default && \
mv /usr/bin/g++ /usr/bin/g++.bak && \
ln -s /program/gcc-12.2.0/bin/g++ /usr/bin/g++
[root@localhost ~]# cp /usr/bin/c++ /usr/bin/c++.default && \
mv /usr/bin/c++ /usr/bin/c++.bak && \
ln -s /program/gcc-12.2.0/bin/c++ /usr/bin/c++
[root@localhost ~]# cp /usr/bin/cc /usr/bin/cc.default && \
mv /usr/bin/cc /usr/bin/cc.bak && \
ln -s /program/gcc-12.2.0/bin/gcc /usr/bin/cc
[root@localhost ~]# cp /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.default && \
mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak && \
ln -s /program/gcc-12.2.0/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6
[root@localhost ~]# cp /usr/local/lib64/libstdc++.so.6 /usr/local/lib64/libstdc++.so.6.default && \
mv /usr/local/lib64/libstdc++.so.6 /usr/local/lib64/libstdc++.so.6.bak && \
ln -s /program/gcc-12.2.0/lib64/libstdc++.so.6 /usr/local/lib64/libstdc++.so.6
[root@localhost ~]# ln -s /program/gcc-12.2.0/lib64/libstdc++.so.6 /lib64/libstdc++.so.6
重要提醒:/usr/lib64/libstdc++.so.6和/usr/local/lib64/libstdc++.so.6两个文件都要指向新版GCC的libstdc++.so.6,否则在执行某些操作时会报【libstdc++.so.6: version `GLIBCXX_*.*.*' not found】错误。
查看GCC版本
[root@localhost ~]# gcc -v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/program/gcc-12.2.0/libexec/gcc/x86_64-pc-linux-gnu/12.2.0/lto-wrapper
目标:x86_64-pc-linux-gnu
配置为:../configure --prefix=/program/gcc-12.2.0/ --enable-checking=release --enable-languages=c,c++ --disable-multilib
线程模型:posix
Supported LTO compression algorithms: zlib
gcc 版本 12.2.0 (GCC)
[root@localhost ~]# gcc --version
gcc (GCC) 12.2.0
Copyright © 2022 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。
[root@localhost ~]#
使用scl和devtoolset创建和切换不同版本GCC
安装scl
[root@localhost ~]# yum install -y centos-release-scl
如果安装完centos-release-scl后yum无法使用可修改下面两个文件
[root@localhost ~]# vim /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
[root@localhost ~]# vim /etc/yum.repos.d/CentOS-SCLo-scl.repo
将[centos-sclo-rh]节点的baseurl设为http://vault.centos.org/centos/7/sclo/$basearch/rh/,并将mirrorlist删除(或注释掉),最终内容如下:
baseurl=http://vault.centos.org/centos/7/sclo/$basearch/rh/
#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-rh
安装多个版本GCC
[root@localhost ~]# yum install -y devtoolset-11-gcc*
[root@localhost ~]# yum install -y devtoolset-10-gcc*
[root@localhost ~]# yum install -y devtoolset-9-gcc*
[root@localhost ~]# yum install -y devtoolset-8-gcc*
[root@localhost ~]# yum install -y devtoolset-7-gcc*
临时切换GCC版本(重入终端或重启系统就会失效,然后恢复到原来的版本)
[root@localhost ~]# scl enable devtoolset-10 bash # 切换到GCC10版本,可根据需求修改“devtoolset-”后面的数字从而临时切换为不同版本
[root@localhost ~]# gcc -v # 查看临时切换GCC版本是否生效
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-10/root/usr/libexec/gcc/x86_64-redhat-linux/10/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-10/root/usr --mandir=/opt/rh/devtoolset-10/root/usr/share/man --infodir=/opt/rh/devtoolset-10/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --with-default-libstdcxx-abi=gcc4-compatible --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-10.2.1-20210130/obj-x86_64-redhat-linux/isl-install --disable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.2.1 20210130 (Red Hat 10.2.1-11) (GCC)
[root@localhost ~]#
长期切换GCC版本
[root@localhost ~]# echo "source /opt/rh/devtoolset-10/enable" >> /etc/profile
[root@localhost ~]# source /etc/profile