部署环境如下:

系统:anolis 7.9

网络:离线部署

GCC版本:GCC10.5.0

一、安装准备

需要注意的是,龙蜥和centos不同,龙蜥最小化安装不会默认安装gcc,先rpm安装gcc4.8.5再进行升级

二、基础依赖

因为是离线部署,所需基础依赖相关依赖包可以在anolis.iso镜像的packages中找到对应基础依赖包,如gcc,gcc-c++,perl

image-20231113233850980

gcc:

image-20231113234000811

gcc-c++:

image-20231113234105010image-20231113234142058

perl:

image-20231113234258064

其他:
image-20231113234234365

把这些需要的离线包上传到 linux 任意目录下,然后依次进入 gcc,gcc+,perl 执行安装命令  

rpm -Uvh *.rpm --nodeps --force

三、 GCC依赖库

GCC依赖四个库:GMP、MPFR、MPC、ISL。

GMP:计算任意精度的数学库, 包括支持整数,有理数和浮点。

MPFR: 一个多精度高效的浮点计算C语言库, 基于GMP。

MPC:一个支持高精度复数的算术运算的C库,并能正确的进行结果舍入。

ISL:用于操作集合和线性约束下的整数点的关系的库,支持集合的交,并和补操作。

其中,MPFR依赖GMP,MPC依赖GMP和MPFR,GCC依赖上面四个库,所以推荐的编译安装顺序是GMP->MPFR->MPC->ISL->GCC

GMP-6.3.0 https://ftp.gnu.org/gnu/gmp/gmp-6.3.0.tar.xz

MPFR-4.2.1 https://www.mpfr.org/mpfr-current/mpfr-4.2.1.tar.xz

MPC-1.3.1 https://ftp.gnu.org/gnu/mpc/mpc-1.3.1.tar.gz

ISL -0.24 http://ftp.tsukuba.wide.ad.jp/software/gcc/infrastructure/isl-0.24.tar.bz2

GCC-10.5.0 http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-10.5.0/gcc-10.5.0.tar.xz

下面开始依次安装

3.1 GMP

cd /home/soft/gcc
tar -xvf gmp-6.3.0.tar.xz
cd /home/soft/gcc/gmp-6.3.0
./configure --prefix=/usr/local/gmp-6.3.0 --build=x86_64-linux
make -j8
make install -j8

3.2 MPFR

cd /home/soft/gcc
tar -xvf mpfr-4.2.1.tar.xz
cd /home/soft/gcc/mpfr-4.2.1
./configure --prefix=/usr/local/mpfr-4.2.1 --with-gmp-include=/usr/local/gmp-6.3.0/include --with-gmp-lib=/usr/local/gmp-6.3.0/lib
make -j8
make install -j8

3.3 MPC

cd /home/soft/gcc
tar -xvf mpc-1.3.1.tar.gz
cd /home/soft/gcc/mpc-1.3.1
./configure --prefix=/usr/local/mpc-1.3.1 --with-gmp-include=/usr/local/gmp-6.3.0/include --with-gmp-lib=/usr/local/gmp-6.3.0/lib  --with-mpfr-include=/usr/local/mpfr-4.2.1/include --with-mpfr-lib=/usr/local/mpfr-4.2.1/lib
make -j8
make install -j8

3.4 ISL

cd /home/soft/gcc
tar -jxvf isl-0.24.tar.bz2
cd /home/soft/gcc/isl-0.24
./configure --prefix=/usr/local/isl-0.24  --with-gmp-prefix=/usr/local/gmp-6.3.0
make -j8
make install -j8

四、 GCC10.5.0版本

安装gcc之前,需将前面安装的依赖库路径配置到环境变量中,否则会提示找不到相关依赖库

export LD_LIBRARY_PATH=/usr/local/gmp-6.3.0/lib:/usr/local/mpfr-4.2.1/lib:/usr/local/mpc-1.3.1/lib:/usr/local/isl-0.24/lib:$LD_LIBRARY_PATH
cd /home/soft/gcc
tar -xvf gcc-10.5.0.tar.xz
cd /home/soft/gcc/gcc-10.5.0
./configure --prefix=/usr/local/gcc-10.5.0 --with-gmp=/usr/local/gmp-6.3.0/  --with-mpfr=/usr/local/mpfr-4.2.1  --with-mpc=/usr/local/mpc-1.3.1 --with-isl=/usr/local/isl-0.24 --disable-multilib --enable-checking=release --enable-languages=c,c++
make -j8
make install -j8

配置环境变量

echo >> /etc/profile <<EOF
export PATH=/usr/local/gcc-10.5.0/bin:$PATH
EOF
source /etc/profile

更新动态库

不更新动态库,会导致编译成功的新程序,运行时报错。

原因是因为升级GCC后相应的动态库没有更新,导致新编译器编译程序成功,运行不成功

# 先删除/usr/lib64/libstdc++.so.6,再重新创建软链接
rm -rf /usr/lib64/libstdc++.so.6
ln -s /usr/local/gcc-10.5.0/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so.6
# 更新gcc、g++链接。首先备份gcc4.8.5
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
mv /usr/bin/g++ /usr/bin/g++-4.8.5
# 创建gcc-10.5.0链接
ln -s /usr/local/gcc-10.5.0/bin/gcc /usr/bin/gcc
ln -s /usr/local/gcc-10.5.0/bin/g++ /usr/bin/g++

检查版本

[root@localhost gcc-10.5.0]# gcc -v

使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/gcc-10.5.0/libexec/gcc/x86_64-pc-linux-gnu/10.5.0/lto-wrapper
目标:x86_64-pc-linux-gnu
配置为:./configure --prefix=/usr/local/gcc-10.5.0 --with-gmp=/usr/local/gmp-6.3.0/ --with-mpfr=/usr/local/mpfr-4.2.1 --with-mpc=/usr/local/mpc-1.3.1 --with-isl=/usr/local/isl-0.24 --disable-multilib --enable-checking=release --enable-languages=c,c++
线程模型:posix
Supported LTO compression algorithms: zlib
gcc 版本 10.5.0 (GCC)