centos 编译升级 GCC 9.2.0/9.3.0

xingyun86 2019-8-24 1836

官方镜像站 GCC源码

https://gcc.gnu.org/mirrors.html

科大开源镜像站 GCC源码
https://mirrors.ustc.edu.cn/gnu/gcc/

1.下载gcc 9.2.0/9.3.0

wget ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-9.2.0/gcc-9.2.0.tar.gz

wget ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-9.3.0/gcc-9.3.0.tar.gz

2.解压&进入目录

注意事项:

[安装automake:

sudo yum install -y automake libtool

或源码安装

https://ftp.gnu.org/gnu/automake/automake-1.16.1.tar.gz

tar xvf automake-1.16.1.tar.gz

cd automake-1.16.1

make

make install

]

tar xvf gcc-9.2.0.tar.gz / tar xvf gcc-9.3.0.tar.gz

cd gcc-9.2.0 / cd gcc-9.3.0

3.运行 download_prerequisites 脚本

./contrib/download_prerequisites

4.建立编译输出目录,将所有的中间文件都放到该目录

mkdir gcc-9.2.0-build / mkdir gcc-9.3.0-build

cd gcc-9.2.0-build / cd gcc-9.3.0-build

5.配置

../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

参数解释:
–enable-checking=release 增加一些检查,也可以–disable-checking生成的编译器在编译过程中不做额外检查
–enable-languages=c,c++ 你要让你的gcc支持的编程语言
–disable-multilib 取消多目标库编译(取消32位库编译)

6.编译

make

大约一小时时间编译

7.编译完成之后,需要把原来的GCC卸载,换成9.2.0 / 9.3.0版本的(该步骤至关重要,执行成功可略去10、11、12步)
找到已安装的gcc和gcc-c++包

rpm -q gcc

rpm -q gcc-c++

删除已经安装低版本

rpm -e [包名]

包名为上一步中显示的包,形如:
gcc-4.8.5-16.el7_4.2.x86_64
gcc-c++-4.8.5-16.el7_4.2.x86_64

那就删除

rpm -e gcc-4.8.5-16.el7_4.2.x86_64

rpm -e gcc-c++-4.8.5-16.el7_4.2.x86_64

sudo yum remove gcc-4.8.5-16.el7_4.2.x86_64

sudo yum remove gcc-c++-4.8.5-16.el7_4.2.x86_64

8.安装

make install

9.验证版本
查看gcc的安装位置:which gcc
然后再查看版本 /usr/local/bin/gcc -v,通常gcc都安装在该处位置

10.软链接替换

sudo ln -s /usr/local/bin/gcc /usr/bin/gcc -f

sudo ln -s /usr/local/bin/g++ /usr/bin/g++ -f

sudo ln -s /usr/local/bin/c++ /usr/bin/c++ -f

11.依赖库文件目录

sudo ln -s /usr/local/lib64/libcc1.so.0 /usr/lib64/libcc1.so.0 -f

sudo ln -s /usr/local/lib64/libgcc_s.so.1 /usr/lib64/libgcc_s.so.1 -f

sudo ln -s /usr/local/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6 -f

sudo ln -s /usr/local/lib64/liblsan.so.0 /usr/lib64/liblsan.so.0 -f

sudo ln -s /usr/local/lib64/libasan.so.5 /usr/lib64/libasan.so.5 -f

sudo ln -s /usr/local/lib64/libubsan.so.1 /usr/lib64/libubsan.so.1 -f

sudo ln -s /usr/local/lib64/libtsan.so.0 /usr/lib64/libtsan.so.0 -f

sudo ln -s /usr/local/lib64/libssp.so.0 /usr/lib64/libssp.so.0 -f

sudo ln -s /usr/local/lib64/libquadmath.so.0 /usr/lib64/libquadmath.so.0 -f

sudo ln -s /usr/local/lib64/libgomp.so.1 /usr/lib64/libgomp.so.1 -f

sudo ln -s /usr/local/lib64/libitm.so.1 /usr/lib64/libitm.so.1 -f

sudo ln -s /usr/local/lib64/libatomic.so.1 /usr/lib64/libatomic.so.1 -f

12.头文件目录

sudo cp /usr/local/include/c++/9.2.0 /usr/include/c++/ -rf

sudo cp /usr/local/include/c++/9.3.0 /usr/include/c++/ -rf

【升级后常见问题及解决方案】

a.如果出现以下错误:

则:

使用strings命令来查看报错的动态库/usr/lib64/libstdc++.so.6中是否含有GLIBCXX_3.4.22

strings /usr/lib64/libstdc++.so.6|grep GLIBCXX

查看目前最新的libstdc++.so

sudo ls -ls /usr/lib64/libstdc++.so*

sudo ls -ls /usr/local/lib64/libstdc++.so*

sudo cp /usr/local/lib64/libstdc++.so.6.0.28 /usr/lib64/
sudo cd /usr/lib64

sudo ln -s libstdc++.so.6.0.28 libstdc++.so.6 -f

sudo ls -l libstdc++*

问题解决!

×
打赏作者
最新回复 (0)
只看楼主
全部楼主
返回