以源码的方式编译升级gcc版本
由于在最新发布的Linux版中的UTS使用了C++17,所以对于如centos7或者比centos7版本更老的Linux系统可能会运行不起来,因为gcc和glibc的版本比较老,这时需要升级更新gcc的版本。下文以Centos7.6为例,源码升级安装gcc-11.2.0版本的gcc。
安装前检测
在linux命令行中执行命令,查看gcc、g++的版本
gcc --version
输出如下所示:
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright © 2015 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。
有些系统可能缺少gcc、g++命令,这时先要安装,执行命令如下所示:
yum install gcc
yum -y install gcc-c++
安装好后,再查看gcc的版本。
centos7自带的gcc版本是4.8.5版本,比我们需要安装的目标版本要低,所以需要更新到目标版本。
下载地址
下载地址:https://ftp.gnu.org/gnu/gcc/gcc-11.2.0/
安装与配置
1、下载并解压安装包
下载
wget https://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.gz --no-check-certificate
解压
tar -xzvf gcc-11.2.0.tar.gz
2、下载依赖包
[root@k8s-node9 software]# cd gcc-11.2.0
[root@k8s-node9 software]# ./contrib/download_prerequisites
3、配置生成Makefile文件
[root@k8s-node9 software]# cd gcc-11.2.0
[root@k8s-node9 software]# mkdir build
[root@k8s-node9 software]# cd build
[root@k8s-node9 build]# ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
在这一步有些服务器可能会遇到一些问题,参考文档末尾解决,如果文档末尾中没有类似问题,可以百度搜索安装相应的工具库。
4、编译并安装
[root@k8s-node9 build]# make -j8
[root@k8s-node9 build]# make install
[!Tip] 此处编译时间较长(一两小时),如果服务器的CPU核心数较多,可以加大make -j后的数字,如make -j32,使用32个线程编译,缩短编译所需时间。
5、备份老的gcc相关
mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.485
mv /usr/bin/gcc /usr/bin/gcc485
mv /usr/bin/g++ /usr/bin/g++485
//有些机器上可能没有cc命令,如果没有执行失败直接忽略
mv /usr/bin/cc /usr/bin/cc485
//有些机器上可能没有cc命令,如果没有执行失败直接忽略
mv /usr/bin/c++ /usr/bin/c++485
6、创建软链接
安装的gcc新版本位于/usr/local/bin目录下面,需要为新版本gcc创建软链接:
ln -s /usr/local/bin/c++ /usr/bin/c++
ln -s /usr/local/bin/g++ /usr/bin/g++
ln -s /usr/local/bin/gcc /usr/bin/gcc
ln -s /usr/local/bin/cc /usr/bin/cc
ln -s /usr/local/lib64/libstdc++.so.6.0.29 /usr/lib64/libstdc++.so.6
执行完毕后,输入如下命令验证是否支持C++17
strings /usr/lib64/libstdc++.so.6 | grep CXXABI
输出如下:
CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
CXXABI_1.3.4
CXXABI_1.3.5
CXXABI_1.3.6
CXXABI_1.3.7
CXXABI_1.3.8
CXXABI_1.3.9
CXXABI_1.3.10
CXXABI_1.3.11
CXXABI_1.3.12
CXXABI_1.3.13
CXXABI_TM_1
CXXABI_FLOAT128
CXXABI_1.3
CXXABI_1.3.11
CXXABI_1.3.2
CXXABI_1.3.6
CXXABI_FLOAT128
CXXABI_1.3.12
CXXABI_1.3.9
CXXABI_1.3.1
CXXABI_1.3.5
CXXABI_1.3.8
CXXABI_1.3.13
CXXABI_1.3.4
CXXABI_TM_1
CXXABI_1.3.7
CXXABI_1.3.10
CXXABI_1.3.3
Tips:如果能够看到CXXABI_1.3.10及以上的CXXABI_1.3.XX,则说明gcc安装设置成功,否则重新执行第6步操作创建软连接ln -s /usr/local/lib64/libstdc++.so.6.0.29 /usr/lib64/libstdc++.so.6。
7、验证版本
安装完毕后,验证更新是否生效
[root@k8s-node7 ~]# gcc --version
gcc (GCC) 11.2.0
Copyright © 2021 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。
如果版本号被更新,则说明已经安装了11.2.0版本的gcc。
8、可能遇到的问题
1. makeinfo: command not found
makeinfo命令找不到,需要安装textinfo,执行如下命令安装:
yum install -y texinfo
2. configure: error: * A compiler with support for C++11 language features is required.
缺少g++编译器,需要安装g++
yum install -y gcc-c++
附录,gcc安装可能需要的依赖
yum install -y gcc-c++ gcc bzip2 texinfo libtool-ltdl libaio