升级GCC

使用常规方式编译安装GCC非常耗时,配置一般的电脑可能要十几二十个小时,如果中途出问题又要重装会非常麻烦,而使用scl和devtoolset不仅可以快速安装不同版本GCC,而且支持临时或长期切换版本。
 
下面先演示常规编译安装GCC,文章最后会演示如何使用scl和devtoolset创建和切换不同版本GCC。



查看当前版本GCC
[root@localhost ~]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright © 2015 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。
[root@localhost ~]# which gcc
/usr/bin/gcc
[root@localhost ~]#



下载新版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的机器上使用该参数可以大大加快编译速度,所以强烈建议使用全部核心来编译。需要注意的是并非所有软件都支持多核心并行编译,如果出现编译失败就将该参数删除再重新编译。


 
备份旧版相关文件,然后用新版覆盖旧版(通过软链接方式)
[root@localhost ~]# mv /usr/bin/gcc /usr/bin/gcc.old && ln -s /program/gcc-12.2.0/bin/gcc /usr/bin/gcc
[root@localhost ~]# mv /usr/bin/g++ /usr/bin/g++.old && ln -s /program/gcc-12.2.0/bin/g++ /usr/bin/g++
[root@localhost ~]# mv /usr/bin/c++ /usr/bin/c++.old && ln -s /program/gcc-12.2.0/bin/c++ /usr/bin/c++
[root@localhost ~]# mv /usr/bin/cc /usr/bin/cc.old && ln -s /program/gcc-12.2.0/bin/gcc /usr/bin/cc
[root@localhost ~]# mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.old && \
                    ln -s /program/gcc-12.2.0/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6
[root@localhost ~]# mv /usr/local/lib64/libstdc++.so.6 /usr/local/lib64/libstdc++.so.6.old && \
                    ln -s /program/gcc-12.2.0/lib64/libstdc++.so.6 /usr/local/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
 
 
 
安装多个版本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

Copyright © 2024 码农人生. All Rights Reserved