官方镜像站 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++*
问题解决!