下载
GCC 源码的下载方式的多种,可以通过 SVN 或者 Git 来 clone 到本地,或者通过 rsync 来同步,可以在官网页面上找到相应的链接。在众多方式中,只有 SVN 方式可以 提交代码(当然也不是随便提交的,这里不详述)。
这里说一下怎么通过 Git 得到代码。GCC 有一个自己的仓库地址,同时在 GitHub 上也 有镜像。这两个仓库都是以 SVN 仓库为基础的,并不接受 patch,这里再强调一下,现 在只有 SVN 方式可以提交代码。(之前 GCC 社区有在做转到 Git 的工作,但推进极其 缓慢,好像已经7年了,还是没有完成,不知道还能不能完成。)克隆仓库的命令可以从 下面选择一个:
1 | git clone git://gcc.gnu.org/git/gcc.git |
配置
先选择要把 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 | CFLAGS="-O0 -g3 -fno-inline" \ |
构建 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
目录下的 xgcc
或 xg++
, 它们就是相
应的 c/c++
编译器。可以使用下面的方法使用它:
1 | ${BUILD}/gcc/xgcc -B${BUILD}/gcc demo.c |
如果你确实想要安装, make install
就可以了。