一、系统环境
系统:CENTOS7.7.1908
内核:3.10.1062
GCC: 4.8.5 GLIBC: 2.17 MAKE: 3.8.2
二、编译准备
正式编译安装前,要具备基本的编译环境,可安装系统自带的 “Development Tools”。其它可参考源自LFS9.2手册中的环境要求:这里
yum groupinstall "development tools" yum install dejagnu texinfo
解压源码包并进入,建立build目录,运行自带依赖包下载程序。
tar xvf gcc-9.2.0.tar.xz cd gcc-9.2.0.tar.xz mkdir build ./contrib/download_prerequisites cd build
躲避坑1:automake的版本有特殊要求,只能使用1.15.1(此处下载)。因为在多次编译失败中发现,automake不能低于1.15(但1.15版本也报错,只认1.15.1版本,也不能高于1.16,不被识别)。使用的依赖包均为当时最新版本,gmp6.1.2 mpc1.1.0 mpfr4.0.2 isl0.21。这样不会出现报错。再多提一句,如果直接将依赖包编译安装进系统,gmp6.1.2可能会报错,提示库文件版本不一致(bug?)可以选择6.0.0或6.1.0版本。
tar xvf automake-1.15.1.tar.xz cd automake-1.15.1 ./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.15.1 make make -j4 check make install
下面正式开始编译,运行命令:
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib --prefix=/usr/local
躲避坑2:多次惨痛的教训,为了提高系统安全性,强烈建议不要直接安装在/usr目录中覆盖原版本。通常像GCC、GLIBC这样关键的升级如果运气不好,安装中途失败,可是会死人的。可以安装在/usr/local或/opt中,这样即使出错了,系统也会找到原版本不至于崩溃。另外建议最好提前用tar备份一下系统,可以根据个人情况自行调整一下命令:
tar -Jcvpf /home/PT/ntfsa/sources/backup191008.tar.xz / \ --exclude=home/PT \ --exclude=usr/src/* \ --exclude=tmp/* \ --exclude=proc \ --exclude=mnt/* \ --exclude=sys/* \ --exclude=dev \ --exclude=run \ --exclude=media/* \ --exclude=var/cache/yum \ --exclude=var/*.log \ --exclude=lost+found \ --exclude=usr/lost+found \ --exclude=home/lost+found \ --exclude=boot/lost+found \ --exclude=var/lost+found \ --exclude=usr/local/lost+found
前面都满足了的话,后面也没遇到什么问题。按部就班执行命令,值得一说的就是make -j4,后面的参数如果不着急时间就不要加,有时候用多线程编译会出现找不到文件或正在使用中的意料之外的错误。
make make install
安装完成后,执行gcc -v查看一下GCC版本,如果版本号没变,就需要再做下一步:
mv /usr/bin/gcc /usr/bin/gcc-4.8.5 mv /usr/bin/g++ /usr/bin/g++-4.8.5 mv /usr/local/bin/gcc /usr/local/bin/gcc-9.2.0 mv /usr/local/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
选择9.2.0版本序号,完成。