centos7升级GCC4.8.5到GCC4.9.0

升级过程:
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:../gcc-4.8.0/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支持,中间没其他版本了:
    这里写图片描述

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

猜你喜欢

转载自blog.csdn.net/guo_lei_lamant/article/details/79591986