一、背景
因业务需要源码编译mongodb4.2.x版本,根据mongodb编译要求gcc版本8.0以上,操作系统为centos7.x,因centos7 yum源升级gcc版本最新至4.8.5,所以需要手动源码安装gcc新版本,本文目标为安装gcc8.3.0。GCC源码下载地址https://gcc.gnu.org/。
二、源码安装
1、下载gcc-8.3.0源码
(可从官方镜像地址https://gcc.gnu.org/mirrors.html选择适合自己的下载地址)
#cd /usr/local/src
#wget https://ftp.gnu.org/gnu/gcc/gcc-8.3.0/gcc-8.3.0.tar.gz
(本实验中从如上连接下载,下载速度不是很快,文件119M下载花费了1小时+)
2、解压源码包
#tar zxvf gcc-8.3.0.tar.gz
#cd gcc-8.3.0
3、下载依赖包
#./contrib/download_prerequisites
需要下载的依赖包如下,下载路径ftp://gcc.gnu.org/pub/gcc/infrastructure/:
gmp=‘gmp-6.1.0.tar.bz2’
mpfr=‘mpfr-3.1.4.tar.bz2’
mpc=‘mpc-1.0.3.tar.gz’
isl=‘isl-0.18.tar.bz2’
4、下载时间比较长,可以另开窗口安装bzip解压工具
(如果未安装bzip2,因下载的依赖包格式为bz2)
#yum install bzip2
5、创建存放编译文件的目录
#mkdir gcc-build-8.3.0
#cd gcc-build-8.3.0
#…/gcc-8.3.0/configure --prefix=/usr --enable-multilib --enable-languages=c,c++ -disable-multilib
6、上一步执行成功后开始编译(此步骤耗时非常久,虚拟机测试一下午3小时+未完成,第二日检查已编译成功)
#make
7、上一步成功后安装
#make install
8、安装成功后使用命令检查gcc版本
#gcc -v
三、番外篇(使用第三方YUM源升级gcc)
升级gcc的一个更加简单的做法,但是这个做法的缺点是只支持64位程序而无32位支持。
采用CentOS的一个第三方库SCL(软件选集),SCL可以在不覆盖原系统软件包的情况下安装新的软件包与老软件包共存并且可以使用scl命令切换,不过也有个缺点就是只支持64位的。还有devtoolset-4(gcc 5.2)及之前的版本都已经结束支持,只能通过其他方法安装。
本次升级到gcc8,命令如下:
yum -y install centos-release-scl
yum -y install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils
scl enable devtoolset-8 bash #启动gcc8
你要哪个版本的就把第2条命令中的数字8改成你要的主版本号就可以了。这样升级到的是最新的版本。例如8升级到的是8.2.0而不是8.1。
通过scl命令启动gcc,这个只是暂时的,当你的shell关闭后或者重启就会恢复原来的版本,要想一直使用升级后的版本可以使用如下命令:
echo “source /opt/rh/devtoolset-8/enable” >>/etc/profile
如上部分来自于链接https://www.cnblogs.com/ToBeExpert/p/10297697.html,经测试可以正常升级到gcc8
四、QA:
1、error: C++ preprocessor “/lib/cpp” fails sanity check 问题的解决
问题的根源是缺少必要的C++库。如果是CentOS系统,运行,如下命令解决:
#yum install glibc-headers
#yum install gcc-c++
2、makeinfo:could not find this command。
需要安装texinfo,该软件是一个文档系统,可用于创建PDF、HTML等文档
#yum -y install texinfo
3、下载依赖包时间较长
如果中途CRTL+C中断,重新执行下载后依赖包名存在,但是不完整需要删除重新下载,可以在链接下ftp://gcc.gnu.org/pub/gcc/infrastructure/直接找到对应的包名,复制链接后,使用wget下载,
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/carefree2005/article/details/110800090