centos7升级gcc
centos7升级gcc示例
由于 Linux 操作系统的自由、开源,在其基础上衍生出了很多不同的 Linux 操作系统,如 CentOS、Ubuntu、Debian 等。这些 Linux 发行版中,大多数都默认装有 GCC 编译器(版本通常都较低)
安装gcc
- 查看是否含有gcc及gcc版本
gcc -v
如果没有gcc,可以通过下面命令来进行安装
yum -y install gcc
yum -y install gcc-c++
升级gcc需要在系统中包含一个低版本的gcc
升级gcc
下载gcc源码包
下载好以后上传到服务器 或者使用 curl | wget 命令下载
curl -O https://mirrors.aliyun.com/gnu/gcc/gcc-11.5.0/gcc-11.5.0.tar.gz
或者
wget https://mirrors.aliyun.com/gnu/gcc/gcc-11.5.0/gcc-11.5.0.tar.gz
解压安装
- 解压
tar -zxvf gcc-11.5.0.tar.gz
mv gcc-11.5.0 /usr/local/gcc-11.5.0
cd /usr/local/gcc-11.5.0
提示
了解即可
下载依赖及配置文件
已安装可以跳过这一步
yum -y install bzip2中标麒麟系统需要以下依赖
yum -y install gmp mpfr mpc isl bzip2
- 下载编译依赖项
提示
更换下载源--只能在这个目录下执行以下命令,可能会失败,多执行几次,因为它会下载几个依赖:mpfr、mpc、gmp 等,
将文件 ./contrib/download_prerequisites
中的字符串
ftp://gcc.gnu.org/pub/gcc/infrastructure/
改为:
http://www.mirrorservice.org/sites/sourceware.org/pub/gcc/infrastructure/


./contrib/download_prerequisites
警告
执行完毕后,可以发现gcc-11.5.0的目录中多了gmp、isl、mpc、mpfr,如果没有这些依赖包,则不能进行下面的操作
出现问题:
mpc-1.0.3.tar.gz: FAILED
sha512sum: WARNING: 1 computed checksum did NOT match
error: Cannot verify integrity of possibly corrupted file mpc-1.0.3.tar.gz
这个就是说验证失败,其实就是下载不完整失败了,可以删除一下下载失败的包,重新执行命令.
或者手动下载,然后上传.会提示覆盖,因为之前下载的包不完整
直到执行命令成功,就可以继续下面操作
./contrib/download_prerequisites
- 新建bulid目录,在gcc-11.5.0目录中
mkdir build
cd build/
- 生成Makefile文件
../configure --prefix=/usr/local --enable-checking=release --enable-languages=c,c++ --disable-multilib
这时候如果出现报错:
|checking for the correct version of gmp.h... no configure: error: Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC 0.8.0+.
解决办法
yum -y install gmp gmp-devel mpfr mpfr-devel libmpc libmpc-devel
这时候在运行命令就成功了
../configure -prefix=/usr/local --enable-checking=release --enable-languages=c,c++ --disable-multilib
--prefix=/usr/local 配置安装目录
–enable-languages表示你要让你的gcc支持那些语言
–disable-multilib不生成编译为其他平台可执行代码的交叉编译器
–disable-checking生成的编译器在编译过程中不做额外检查
也可以使用*–enable-checking=xxx*来增加一些检查
- 开始编译
提示
这一步需要时间非常久 可以使用 make -j 4 让make最多运行四个编译命令同时运行,加快编译速度(建议不要超过CPU核心数量的2倍),但是并行构建有时候会抢占系统资源.引发问题
make -j 16
如果失败:
make clean
然后就不要再并行make了
- 编译安装
make install
- 查看
gcc -v
提示
验证:gcc -v;或者g++ -v,如果显示的gcc版本仍是以前的版本,就需要重启系统;
或者可以查看gcc的安装位置:which gcc;
然后在查看版本 /usr/local/bin/gcc -v
确定以及配置成功后可以将原先的版本删除
删除旧版本
yum -y remove gcc g++
配置新版本全局可用
ln -s /usr/local/bin/gcc /usr/bin/gcc
ln -s /usr/local/bin/g++ /usr/bin/g++
更新动态库
- 查找编译gcc时生成的最新动态库
find / -name libstdc++.so.6
或者
find / -name "libstdc++.so*"
输出如下内容:
/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.19
/usr/local/lib64/libstdc++.so.6.0.29-gdb.py
/usr/local/lib64/libstdc++.so.6.0.29
/usr/local/lib64/libstdc++.so.6
/usr/local/lib64/libstdc++.so
/usr/local/gcc-11.5.0/build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.29
/usr/local/gcc-11.5.0/build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/usr/local/gcc-11.5.0/build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/usr/local/gcc-11.5.0/build/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.29
/usr/local/gcc-11.5.0/build/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/usr/local/gcc-11.5.0/build/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/usr/local/gcc-11.5.0/build/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.29
/usr/local/gcc-11.5.0/build/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/usr/local/gcc-11.5.0/build/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyo
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.py
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyc
根据以上内容可以知道升级gcc时的输出路径,将最新动态库libstdc++.so.6.0.29复制到/usr/lib64路径下
cp /usr/local/gcc-11.5.0/build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.29 /usr/lib64
- 重建默认库的软连接:
cd /usr/lib64
查看老版本
find ./ -name libstdc++.so.6
查看新版本
find ./ -name libstdc++.so.6.0.29
删除老版本
rm -f /usr/lib64/libstdc++.so.6
建立全局新版本
ln -s libstdc++.so.6.0.29 libstdc++.so.6
- 检查动态库升级完情况
strings /usr/lib64/libstdc++.so.6 | grep GLIBC

提示
安装后的动态库会位于/usr/local/lib64目录下
其他版本在该目录下寻找对应的动态库libstdc++.so.6.X.XX
查看
gcc -v
