centos更新gcc编译器

编译器源码地址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、安装完成后执行出现的一些坑以及解决办法

  1. 出现
    [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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值