起初打算在物理机Centos7上编译gcc源码。但是环境比较复杂,编译过程中遇到各种错误,于是索性就在docker容器下挂载gcc源码进行编译,采用的镜像是centos7.编译还算比较顺利。在此记录一下,写个流水账。
这里docker的安装就略过了,网上有很多教程。 xxx替换为自己的用户名
这里先把 gcc源码下载下来。
地址为:Index of /gnu/gcchttps://ftp.gnu.org/gnu/gcc/
我这里用的是gcc 9.5的版本。这里我把源码放在$HOME/src 目录下了,编译安装后的代码准备放在$HOME/app目录下。
wget https://ftp.gnu.org/gnu/gcc/gcc-9.5.0/gcc-9.5.0.tar.gz
启动进入容器:
docker run -it -v /home/xxx:/home/xxx centos:7 /bin/bash
以下操作均在容器内进行。
gcc源码编译:
先看看镜像里有没有gcc,我这里没有,需要通过软件源在容器里安装一个老版本的。
gcc --version
然后更新软件源,安装gcc和gcc-c++ 这两个。因为我们后面要安装c和cpp两种
yum makecache
yum install gcc
yum install gcc-c++
这个zlib-devel也是需要提前安装的,这个在后面编译gcc的时候会用到。这里提前先安装了。
yum install zlib-devel
安装完后,可以查看一下安装的gcc版本,我这里yum安装的是gcc-4.8.5b版本
rpm -qa | list gcc
rpm -ql gcc-4.8.5-44.el7.x86_64
接下来就是
依次安装依赖gmp,mpfr,mpc
安装的版本号和地址在gcc源码 contrib/download_prerequisites下可以查看
通过这个地址下载,这里只需要下载gmp,mpfr,mpc即可
这里统一将依赖以及gcc源码安装在 $HOME/app 目录下
源码统一放在 $HOME/src下
安装gmp前先安装m4
yum install -y m4
然后安装gmp
./configure --prefix=/home/wzy/app/gmp-6.1.0
make -j && make install
安装mpfr
./configure --prefix=/home/wzy/app/mpfr-3.1.4 --with-gmp=/home/wzy/app/gmp-6.1.0
make -j && make install
安装mpc
./configure --prefix=/home/wzy/app/mpc-1.0.3 --with-gmp=/home/wzy/app/gmp-6.1.0 --with-mpfr=/home/wzy/app/mpfr-3.1.4
make -j && make install
最后构建编译gcc, 进入gcc源码build目录(没有创建)
执行
../configure --with-gmp=/home/wzy/app/gmp-6.1.0 --with-mpc=/home/wzy/app/mpc-1.0.3 --with-mpfr=/home/wzy/app/mpfr-3.1.4 \
--disable-multilib \
--enable-bootstrap \
--enable-languages=c,c++ \
--enable-threads=posix \
--prefix=/home/wzy/app/gcc-9.5.0-build
make -j && make install
经过数小时后就可以看到gcc安装成功!
最终效果如下:
编译结束效果
安装结束效果: