记录一次编译gcc的过程

记录一次编译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显示的是最新版本。

友情链接:
Copyright © 2022 86年世界杯_世界杯预选赛阿根廷 - fjyfzz.com All Rights Reserved.