阿里云服务器CentOS 7.9.2009使用源码从gcc 8.3.1升级至gcc 11.3.0

  • Post author:
  • Post category:其他


在云服务器中使用

cat /etc/redhat-release

查看CentOS操作系统中的编号。

在这里插入图片描述

从图中可以看出这是

CentOS Linux release 7.9.2009 (Core)



我以前将自己的gcc升级到8.3,使用

gcc -v

可以查看一下当前gcc的版本。

在这里插入图片描述



下载源文件及解压


wget http://ftp.gnu.org/gnu/gcc/gcc-11.3.0/gcc-11.3.0.tar.gz

下载源码。

在这里插入图片描述


tar -zxvf gcc-11.3.0.tar.gz

进行解压。

在这里插入图片描述

解压完成后,如下图所示:

在这里插入图片描述


pwd

查看一下当前所处目录。

在这里插入图片描述


/root/gcc-11.3.0/contrib/download_prerequisites

自动下载所需要的依赖。

发现提示:

error: You must run this script in the top-level GCC source directory



在这里插入图片描述



编译前准备


cd gcc-11.3.0

进入到top-level GCC source目录——

/root/gcc-11.3.0

下。

在这里插入图片描述


./contrib/download_prerequisites

下载依赖包。

在这里插入图片描述

2023-02-12 16:00:53 URL:http://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840/2383840] -> "gmp-6.1.0.tar.bz2" [1]
2023-02-12 16:02:00 URL:http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.6.tar.bz2 [1287202/1287202] -> "mpfr-3.1.6.tar.bz2" [1]
2023-02-12 16:02:43 URL:http://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925/669925] -> "mpc-1.0.3.tar.gz" [1]
2023-02-12 16:04:24 URL:http://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 [1658291/1658291] -> "isl-0.18.tar.bz2" [1]


./configure --prefix=/usr/local/gcc-11.3 --enable-bootstrap --enable-languages=c,c++ --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib

进行配置。

在这里插入图片描述

完成之后如下图:

在这里插入图片描述



进行编译及安装


make -j8

可以进行编译,

-j

后边可以跟上CPU核数的双倍。

在这里插入图片描述

最后发现报错:

fatal error: gnu/stubs-32.h: No such file or directory


在这里插入图片描述

使用

yum -y install glibc-devel.i686

找到依赖项。

在这里插入图片描述

安装完成之后如下图:

在这里插入图片描述

然后再次执行

make -j8

编译,出现下图的情况就是完成:

在这里插入图片描述


make install

进行安装。

在这里插入图片描述



建立软连接


cd /usr/bin

进入到/usr/bin目录下。

在这里插入图片描述

先进行原来可执行文件的备份:

mv gcc gcc_back
mv g++ g++_back
mv c++ c++_back

在这里插入图片描述

设立软链接:

ln -s /usr/local/gcc-11.3/bin/gcc gcc
ln -s /usr/local/gcc-11.3/bin/g++ g++
ln -s /usr/local/gcc-11.3/bin/c++ c++

在这里插入图片描述



更新libstdc


cd /usr/lib64

进入到lib64目录下。


mv libstdc++.so.6 libstdc++.so.6.back

备份。


ln -s /usr/local/gcc-11.3/lib64/libstdc++.so.6.0.29 libstdc++.so.6

设置软连接。

在这里插入图片描述



设置环境变量

echo export PATH=$PATH:/usr/bin >> /etc/profile # 因为安装过devtoolset-8-build,使用`source /opt/rh/devtoolset-8/enable`所以把gcc环境变量更改过,所以gcc无法从/usr/bin这个环境变量寻找,故而需要重新设定一下。
echo export LD_LIBRARY_PATH=/usr/local/gcc-11.3/lib:/usr/local/gcc-11.3/lib64:$LD_LIBRARY_PATH >> /etc/profile # 这是正常设定
source /etc/profile # 使环境变量生效

在这里插入图片描述



卸载gcc 8


sudo yum remove devtoolset-8-build

卸载devtoolset-8-build。

在这里插入图片描述


sudo yum remove devtoolset-8-gdb -y

卸载devtoolset-8-gdb。

在这里插入图片描述


sudo yum -y remove devtoolset-8-gcc devtoolset-8-gcc-c++

卸载devtoolset-8-gcc和devtoolset-8-gcc-c++。

在这里插入图片描述

使用

gcc -v

发现提示

-bash: /opt/rh/devtoolset-8/root/usr/bin/gcc: No such file or directory

,然后使用

source /etc/profile

使环境变量重新生效,再使用

gcc -v

发现显示为gcc 11.3,安装成功了。

在这里插入图片描述



版权声明:本文为qq_42108074原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。