centos7升级GCC4.8.5到GCC4.9.0

[2019-02-14 update] 找到一种更省心省力的gcc升级使用用方式,不过是临时使用。
移步:Centos7升级gcc版本方法之一使用scl软件集
经测试,执行 ‘exit’ 退出后 gcc 回复为原来的版本,这样做有一个好处就是避免破环系统环境,一个弊端就是每次都得重新执行 ‘scl enable devtoolset-4 bash’ 来更换 gcc 版本,这一点可以通过设置环境变量来解决:export PATH=$PATH:/opt/rh/devtoolset-4/root/usr/bin。


升级过程:
1、源码找不到。。。这里附上源码http://ftp.gnu.org/gnu/gcc/,里面有各个版本,我根据需要下载安装了gcc4.9.0
在Linux系统中下载用到命令行:wget http://ftp.gnu.org/gnu/gcc/gcc-4.9.0/gcc-4.9.0.tar.bz2
wget是一个。。额。。不解释了
2、下载好之后,解压文件:tar -jxvf gcc-4.9.0.tar.bz2
3、解压完成,进入文件目录:cd gcc-4.9.0
4、利用源码包里自带的工具下载所需要的依赖项:./contrib/download_prerequisites //注意路径
5、创建编译输出目录(自定):mkdir build
6、进入输出目录:cd build;
7、生成Makefile:../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
release版本——使用支持C/C++——multilib感觉是生成多个库的意思?
8、编译:make -j4 //选项 -j4 是多核编译
9、编译完成后,安装:make install
10、检查一下是否安装成功:gcc -v //查看gcc版本 如下:
这里写图片描述


以下是碰到的问题:
1、忘记记录问题了,好像是在make时候碰到的,反正解决方法是su root用户,大意是权限问题,其他地方如果碰到类似问题也可以尝试这个方法

2、gcc升级之后,qmake make都ok,可是在运行生成的可执行文件时提示(故意删了库重现这个问题TnT):
这里写图片描述
网上查到一个命令:strings /usr/lib64/libstdc++.so.6|grep GLIBCXX
结果:这里写图片描述
发现并没有GLIBCXX_3.4.20,虽然并不知道是什么鬼。。
解决方法:同样使用上述命令查看:strings /usr/local/lib64/libstdc++.so.6|grep GLIBCXX
发现有GLIBCXX_3.4.20:
这里写图片描述
然后看看 /usr/lib64 下和 /usr/local/lib64 下的文件:
这里写图片描述
注意这两个路径,问题根源就在这里
ok,干货来了:

  • 将 /usr/local/lib64 下的 libstdc++.so.6.20 拷贝至 /usr/lib64 下:cp /usr/local/libstdc++.so.6.0.20 /usr/lib64
  • 进入 /usr/lib64/ 瞅一眼:
cd /usr/lib64
ls libstdc*

这里写图片描述

  • /usr/lib64 下的 libstdc++.so.6 是一个我只知道叫软链接的东西,此时软链接 链接的是同目录下的libstdc++.so.6.0.19,可输入命令查看:ll libstdc*
    这里写图片描述

  • 删除原来的软链接:rm -f libstdc++.so.6
    创建新的软链接:ln -s libstdc++.so.6.0.20 libstdc++.so.6选项 -s 是创建软链接,只有 ln 则创建硬链接
    这是再看看链接:ll libstdc*
    链接已修改,重新运行程序,一切正常。。。


这里说一下自己的理解:

  • /usr/lib64 是存放系统应用文件或库文件的目录,而 /usr/local/lib64 是存放用户库文件的目录,所以如果想让整个系统应用gcc4.9.0,就需要将 /usr/local/lib64 的库文件拷贝至 /usr/lib64 下并更新软链接
  • GLIBCXX好像是随 gcc 生成的东西,暂时还不知道是什么,gcc4.8.5 对应 GLIBCXX_3.4.19,gcc4.9.0 对应GLIBCXX_3.4.20
  • 经测试,gcc4.8.5不支持regex,gcc4.9.0支持,中间没其他版本了:
    这里写图片描述

2018/6/29更新:
今天碰到一个问题,按照以上步骤全部完成后,在输入gcc -v 确认版本时发现仍然显示为
这里写图片描述
查看了/usr/bin/gcc,文件存在,版本显示为4.8.5;
查看/usr/local/bin/gcc,文件存在,版本显示为4.9.0.
初步确定问题为path问题,echo $PATH查看发现/usr/local/bin 和 /usr/bin 均在path内,且/usr/local/bin更靠前,有点懵,网上没有找到解决方法,最后是先把/usr/bin下的gcc 修改为gcc4.8.5,然后调用gcc -v 显示版本为4.9.0,先借此完成了编译任务。

不过,并不建议这样操作,会影响其他用户,所以我在完成任务后把gcc4.8.5改回了gcc,重新输入gcc -v发现显示版本4.9.0。
所以问题到底是什么。。。感觉是配置没有刷新或者更新的原因。


一切只是基于自我浅薄认识的分享,如有不当之处,敬请指出,共同进步。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值