编译器源码地址https://mirror.sergal.org/gnu/gcc/
先下载想要的gcc 版本
1 先到相应目录 解压gcc源码包
cd /usr/local/src
tar zxf gcc-8.3.0.tar.gz //解压源码 gcc的版本 这个是示例版本 gcc-8.3.0.tar.gz
2、进入gcc目录,安装gcc依赖库
cd gcc
./contrib/download_prerequisites
执行命令后它会自动下载mpfr、gmp、mpc isl这4个库
如果执行报错:tar (child): lbzip2: no exec: no file or directory
解决方法:安装解压软件即可
yum -y install bzip2
3、在新目录中配置、编译、安装
mkdir build
cd build
../configure --prefix=/usr/local/gcc --enable-languages=c,c++ --disable-multilib
make
make install
如果出现任务报错
编译报错:flex:Command not found
解决方法:安装flex
yum -y install flex
再次编译之前建议先清空build目录,不然可能会报错:error: `M4' has changed since the previous run
解决方法:清空build(你自己创建的)目录
rm -rf /usr/local/src/gcc/build/*
如果清空了目录,需要重新做配置再编译
../configure --prefix=/usr/local/gcc --enable-languages=c,c++ --disable-multilib
make
make install
编译很漫长。。。
4、修改软链接后查看gcc版本
mv /usr/bin/gcc /usr/bin/gcc_old
ln -s /usr/local/gcc/bin/gcc /usr/bin/gcc
mv /usr/bin/g++ /usr/bin/g++_old
ln -s /usr/local/gcc/bin/g++ /usr/bin/g++
gcc --verson
g++ --version
或者删除之前的版本
yum -y remove gcc
vim /etc/profile.d/gcc.sh
export PATH=$PATH:/usr/local/gcc/bin
source /etc/profile.d/gcc.sh
gcc -v
5、安装完成后执行出现的一些坑以及解决办法
- 出现
[root@VM-0-5-centos code]# ./a.out ./a.out: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./a.out) ./a.out: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by ./a.out) [root@VM-0-5-centos code]# ./start.sh ./a.out: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by ./a.out)
因为/lib64/libstdc++.so.6 链接的库还是老版本,所以要进行更新。
更新方法
1 首先查看动态链接库版本 输入如下命令:
strings /usr/lib64/libstdc++.so.6 | grep CXXABI
结果如图所示:
并没有1.3.9版本!
然后用find / 全局查找命令找到更新GCC之后编译出来的libstdc++.so.6的位置。
find / -name "libstdc++.so*" //全局查找带有 关键字的文件
结果如图:👇
你吖原来在/usr/local/gcc/lib64/libstdc++.so.6.0.29这个地方!
2 删除原来的软链接并且修改
rm -f /usr/lib64/libstdc++.so.6
ln -s /usr/local/lib64/libstdc++.so.6.0.29 /usr/lib64/libstdc++.so.6 //修改软链接
到这里就大功告成啦。
注意:::
修改软链接的时候,一定要改到/usr/lib64/ 的位置,因为这里面还有一些共享库的依赖。
否则:当你在执行编译好的可执行文件的时候,会出现:
./a.out: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory