记录一次编译gcc的过程
准备
系统:Ubuntu 20.04.1
软件包:gcc-10.2.0.tar.gz、gmp-6.2.1.tar.zst、m4-1.4.18.tar.gz(之后换成了m4-1.4.7.tar.gz)、mpc-1.2.1.tar.gz、mpfr-4.1.0.zip
使用到的命令
#解压
tar -zvxf ***.tar.gz
tar -I zstd -xvf ***.tar.zst
unzip ***.zip
#安装
./configure
make
sudo make install
#安装其他软件
sudo apt install
开始安装
根据官方的说明,gcc依赖m4、gmp、mpc、mpfr,所以在安装gcc之前要依次安装m4、gmp、mpc、mpfr。为什么要依次安装这些包?因为这些软件从后向前有依赖关系,直接安装gcc会有如下的提示。
在安装gcc时,运行命令./configure --help | more
可以看到,在安装gcc时,系统会在PATH
中检索这些依赖包。
官网对这些包都有版本要求,传送门,这里列举了安装过程中可能用到的包,以及版本要求。
在使用命令tar -I zstd -xvf gmp-6.2.1.tar.zst
解压gmp-6.2.1.tar.zst
时,没能成功解压,原因是没有安装zstd
。
成功解压之后进入目录,运行./config
,系统提示没有安装m4
,有的Ubuntu安装的有m4
,而有的Ubuntu没有安装。
在安装m4
的时候,又出错了。
看了网上的方法,是由于使用的版本太高了,于是就换成了比较贴近gcc要求的版本m4-1.4.7.tar.gz
。具体是什么引起的错误,先挖个坑,以后再研究。
在安装之前使用./configure --help | more
命令可以看到这些包的默认安装路径是/usr/local
。
在使用make install
时可以通过--prefix = target_path
,指定想要安装的路径。
四个依赖包安装完成之后会在/usr/local
中看到新添加的动态库以及头文件。
官网建议新建一个空白文件夹用来编译gcc,于是我新建了一个gcc-build
文件夹。当运行configure
时,系统提示如下
我选择了只编译一个64位的编译器,configure --disable=multilib
。
在进行下一步时,系统提示
configure: error: C++ preprocessor "/lib/cpp" fails sanity check
网上说是缺少了相关的C++库,解决方法如下:
#Ubuntu解决方法
apt install build-essential
apt install g++
# centos解决方法
yum install glibc-headers
yum install gcc-c++
然后就可以进行下一步了。执行make
的时间很长,我等了将近3个小时。
由于在安装时我使用的是默认安装路径,导致系统自带的gcc被覆盖。gcc --version
显示的是最新版本。