Linux 脚本自动化编译安装gcc-9.2.0(地狱难度???)

   Linux 脚本自动化编译安装gcc-9.2.0(地狱难度???)

不得不说编译安装一次gcc-9.2.0需要的时间非常长,使用单线程,四核CPU跑了5个小时,因此强烈建议睡觉前安装,别的时间不要安装,人和机器都想崩溃。

首先,我的机器为四核的4g内存的机器,系统为centos7.0,内核版本为3.10版本。

那,不用说,都知道gcc是c语言的编译器,为什么要升级高版本呢?centos7自带的gcc版本一般为4.8.5版本,但是象mysql -8.0以上的版本编译安装需要高版本gcc,好像需求是至少gcc5.3吧。或者node.js这样的等等各种高版本软件需要高版本的gcc支持(mysql8.0据说比5.7速度快很多哦,诱惑有点大)。

编译升级gcc高版本之前,需要了解一下需要6个依赖,这6个依赖需要一一处理好,(下载都是走的清华云,国内速度快)

wget http://mirror.hust.edu.cn/gnu/gcc/gcc-9.2.0/gcc-9.2.0.tar.gz   这个是要编译的主程序

wget http://mirror.hust.edu.cn/gnu/m4/m4-1.4.18.tar.gz      这个是第一个依赖,但没有关联依赖,正常编译安装完就行

wget http://mirror.hust.edu.cn/gnu/automake/automake-1.15.1.tar.gz 这个据说是特定版本,别的版本不好使。别的版本没敢试,正常的编译安装不可以通过,使用如下命令修改Makefile 文件即可,命令如下:

sed -i '/$(update_mans) automake/d' /usr/local/src/automake-1.15.1/Makefile
sed -i '/automake-$(APIVERSION).1:/a $(update_mans) automake-$(APIVERSION) --no-discard-stderr' /usr/local/src/automake-1.15.1/Makefile

具体的详情 请看我下面的脚本源码。

wget http://mirror.hust.edu.cn/gnu/gmp/gmp-6.1.0.tar.bz2  只是gcc的依赖,不建议手动安装(下面会说自动)

wget http://mirror.hust.edu.cn/gnu/mpfr/mpfr-3.1.4.tar.bz2 这个依赖m4好像,不建议手动安装

wget http://mirror.hust.edu.cn/gnu/mpc/mpc-1.0.3.tar.gz   这个依赖 gmp和mpfr,具体忘了,不建议手动安装(有自动安装的方法)

wget ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2  这个下载是外网,国内不好找,1.6兆大小,勉强可以接受

也不建议手动安装(有自动安装的方法)

 

 

不过有一个好消息,可以使用gcc-9.2.0的configure脚本处理上述的最后四个依赖,也就是gmp,mpfr,mpc,isl这四个使用configure脚本安装了,不用操心依赖了。但需要使用gcc源安装包内的download_prerequisites这个脚本文件处理下载以及软链接的问题,以使configure脚本自动编译。

那么,问题来了,国外的网站速度太慢并经常报错,(长城的问题,都懂得),怎么办?换成国内的清华云的地址即可。在下面的我的脚本源码内会处理这个问题。

素质三连正常完成后,将旧版gcc隐藏,使用新版gcc-9.2.0,使用gcc -v 命令查询,如显示gcc -9.2.0,那么就是安装成功了!!

新版替换旧版的方法有两种,一种是你连我,我连你的手动链接方法。

一种方法是使用alternative命令自动切换新旧版本。我选择使用自动切换的方法。

#!/bin/bash
#auther zsk_john
yum install -y -q autoconf  apr  apr-devel  apr-util apr-util-devel \
                 bison  bzip2-devel cpp fontconfig-devel freetype-devel  gcc gcc-c++  compat-dapl \
                 compat-db-headers  compat-db47   compat-gcc-44 compat-gcc-44-c++  compat-glibc  \
                 compat-glibc-headers compat-libcap1 compat-libf2c-34  compat-libgfortran-41 \
                 compat-libtiff3 compat-openldap ncurses-devel bzip2






wget http://mirror.hust.edu.cn/gnu/gcc/gcc-9.2.0/gcc-9.2.0.tar.gz
tar -zxf `find / -name gcc-9.2.0.tar.gz` -C /usr/local/src/
wget http://mirror.hust.edu.cn/gnu/m4/m4-1.4.18.tar.gz
tar -zxf `find / -name m4-1.4.18.tar.gz`  -C /usr/local/src/
cd /usr/local/src/m4-1.4.18 && ./configure --prefix=/usr/local/m4 && make && make install
wget http://mirror.hust.edu.cn/gnu/automake/automake-1.15.1.tar.gz
tar -zxf `find / -name automake-1.15.1.tar.gz` -C /usr/local/src/
cd /usr/local/src/automake-1.15.1/ && ./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.15.1
sed -i '/$(update_mans) automake/d' /usr/local/src/automake-1.15.1/Makefile
sed -i '/automake-$(APIVERSION).1:/a $(update_mans) automake-$(APIVERSION) --no-discard-stderr' /usr/local/src/automake-1.15.1/Makefile
make && make install




cd /usr/local/src/gcc-9.2.0/ && cp /usr/local/src/gcc-9.2.0/contrib/download_prerequisites /root/
wget -O /usr/local/src/gcc-9.2.0/gmp-6.1.0.tar.bz2  http://mirror.hust.edu.cn/gnu/gmp/gmp-6.1.0.tar.bz2
tar -jxf `find / -name gmp-6.1.0.tar.bz2`  -C /usr/local/src/gcc-9.2.0/
wget -O /usr/local/src/gcc-9.2.0/mpfr-3.1.4.tar.bz2  http://mirror.hust.edu.cn/gnu/mpfr/mpfr-3.1.4.tar.bz2
tar -jxf `find / -name mpfr-3.1.4.tar.bz2` -C /usr/local/src/gcc-9.2.0/
wget -O /usr/local/src/gcc-9.2.0/mpc-1.0.3.tar.gz  http://mirror.hust.edu.cn/gnu/mpc/mpc-1.0.3.tar.gz
tar -zxf `find / -name mpc-1.0.3.tar.gz` -C /usr/local/src/gcc-9.2.0/
wget -O /usr/local/src/gcc-9.2.0/isl-0.18.tar.bz2  ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2
#rm -rf /usr/local/src/gcc-9.2.0/isl-0.18.tar.bz2
#cp `find / -name isl-0.18.tar.bz2` /usr/local/src/gcc-9.2.0/
cp /root/download_prerequisites /usr/local/src/gcc-9.2.0/contrib/download_prerequisites
sed -i -e'58,62d' -e '35d' /usr/local/src/gcc-9.2.0/contrib/download_prerequisitescd /usr/local/src/gcc-9.2.0/ && /usr/local/src/gcc-9.2.0/contrib/download_prerequisites
rm -rf /usr/local/src/gcc-9.2.0/build
mkdir /usr/local/src/gcc-9.2.0/build && cd /usr/local/src/gcc-9.2.0/build
../configure -enable-checking=release -enable-languages=c,c++,objc,obj-c++,fortran -disable-multilib --prefix=/usr/local/gcc
make -j  $(nproc) && make install


mv /usr/bin/gcc /usr/bin/gcc-4.8.5 && mv /usr/bin/g++ /usr/bin/g++-4.8.5
mv /usr/local/gcc/bin/gcc /usr/local/bin/gcc-9.2.0
mv /usr/local/gcc/bin/g++  /usr/local/bin/g++-9.2.0
alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8.5 10 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8.5
alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc-9.2.0 20 --slave /usr/bin/g++ g++ /usr/local/bin/g++-9.2.0
alternatives --config gcc

脚本大体分为四个部分,第一块是初始化编译环境,第二块是初始化编译两个依赖包,第三块是正式编译,第四块是新版gcc代替旧版gcc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚风_END

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值