GCC 的下载与构建

下载

GCC 源码的下载方式的多种,可以通过 SVN 或者 Git 来 clone 到本地,或者通过 rsync 来同步,可以在官网页面上找到相应的链接。在众多方式中,只有 SVN 方式可以 提交代码(当然也不是随便提交的,这里不详述)。

这里说一下怎么通过 Git 得到代码。GCC 有一个自己的仓库地址,同时在 GitHub 上也 有镜像。这两个仓库都是以 SVN 仓库为基础的,并不接受 patch,这里再强调一下,现 在只有 SVN 方式可以提交代码。(之前 GCC 社区有在做转到 Git 的工作,但推进极其 缓慢,好像已经7年了,还是没有完成,不知道还能不能完成。)克隆仓库的命令可以从 下面选择一个:

1
2
git clone git://gcc.gnu.org/git/gcc.git
git clone https://github.com/gcc-mirror/gcc

配置

先选择要把 GCC 构建在哪个目录,构建之前需要先进行 configure, 不要选在源文件所 在目录或其子目录,GCC 并不支持这样做。

GCC 的配置选项很多1,初次接触的话可以尽量简单配置,比如:

选项 描述
--enable-languages 指定要构建哪些语言对应的编译器及运行时库
--prefix 指定安装目录,不要与源码或构建目录相同
--disable-bootstrap 禁止 bootstrap

GCC 在构建时,默认会构建 3 次:用本地 gcc 作为编译器构建出 stage1-gcc,用 stage1-gcc 作为编译器构建出 stage2-gcc,用 stage2-gcc 作为编译器构建出 stage3-gcc。这个过程叫做 bootstrap

stage3-gcc 被认为是最好或最符合源码的一个构建,但比较费时,可以使用 --disable-bootstrap 来禁止。但需要注意,在修改过源码后,如果没有 bootstrap 可以编译通过,并不代表 bootstrap 一定会过。(要不然 bootstrap 也没有存在的意义 了。)

还有就是 GCC 默认是构建 release 版本,不利于调试,如果要构建 debug 版,需要在 configure 时就进行配置,构建 debug 版的命令为(假设 GCC 源码位于 ${GCC_SRC}):

1
2
3
4
5
6
7
CFLAGS="-O0 -g3 -fno-inline"              \
CXXFLAGS="-O0 -g3 -fno-inline" \
CFLAGS_FOR_BUILD="-O0 -g3 -fno-inline" \
CFLAGS_FOR_TARGET="-O0 -g3 -fno-inline" \
CXXFLAGS_FOR_BUILD="-O0 -g3 -fno-inline" \
CXXFLAGS_FOR_TARGET="-O0 -g3 -fno-inline" \
${GCC_SRC}/configure --enable-languages=c,c++ --disable-bootstrap --prefix=/tmp/gcc-tmpi

构建 release 版的命令为(如果不需要 bootstrap,可以自己加上参数):

1
${GCC_SRC}/configure --enable-languages=c,c++ --prefix=/tmp/gcc-tmpi

如果 configure 失败,可能是缺少依赖的库,根据提示安装上即可。比如 Ubuntu 可 以尝试用下面这条命令安装部分依赖:

1
sudo apt install -y libgmp-dev libmpfr-dev libmpc-dev

构建

configure 之后只需在 build 目录中运行 make 即可。根据计算机配置可以加上合 适的 -j 参数。

安装

如果只是想试用一下新编译的 GCC,你并不需要安装它。假设构建目录为 ${BUILD}, 找到 ${BUILD}/gcc 目录下的 xgccxg++, 它们就是相 应的 c/c++ 编译器。可以使用下面的方法使用它:

1
${BUILD}/gcc/xgcc -B${BUILD}/gcc demo.c

如果你确实想要安装, make install 就可以了。

Last Updated 2019-07-09 Tue 17:23.
Render by hexo-renderer-org with Emacs 26.1 (Org mode 9.1.13)
0%