5.4. GCC-4.0.3 – 第一遍

最后更新于:2022-04-01 22:47:48

# 5.4\. GCC-4.0.3 - 第一遍 GCC 软件包包含 GNU 编译器集合,其中有 C 和 C++ 编译器。 **预计编译时间:** 8.2 SBU**所需磁盘空间:** 514 MB ## 5.4.1\. 安装 GCC GCC 的安装指南推荐用一个新建的目录来编译它,而不是在源码目录中: ``` mkdir -v ../gcc-build cd ../gcc-build ``` 为编译 GCC 做准备: ``` ../gcc-4.0.3/configure --prefix=/tools \ --with-local-prefix=/tools --disable-nls --enable-shared \ --enable-languages=c ``` **配置选项的含义:** _`--with-local-prefix=/tools`_ 这个参数的目的是把 `/usr/local/include` 目录从 `gcc` 的 include 搜索路径里删除。这并不是绝对必要,但我们想尽量减小宿主系统的影响,所以才这样做。 _`--enable-shared`_ 这个参数咋一看有点违反直觉。但只有加上它,才能编译出 `libgcc_s.so.1` 和 `libgcc_eh.a` 。Glibc(下一个软件包)的配置脚本只有在找到 `libgcc_eh.a` 时才能确保产生正确的结果。 _`--enable-languages=c`_ 只编译 GCC 软件包中的 C 编译器。我们在本章里不需要其它编译器。 接下来编译它: ``` make bootstrap ``` **make 参数的含义:** _`bootstrap`_ 使用这个参数的目的不仅仅是编译 GCC ,而是重复编译它几次。它用第一次编译生成的程序来第二次编译自己,然后又用第二次编译生成的程序来第三次编译自己,最后比较第二次和第三次编译的结果,以确保编译器能毫无差错的编译自身,这通常表明编译是正确的。 编译现在完成了,通常我们会在这里运行测试套件,但是正如前面说过的,测试套件目前尚未安装,而且在这里运行测试没什么用处,因为第一遍安装的程序很快就会被第二遍的程序所覆盖。 安装软件包: ``` make install ``` 最后,我们创建一个必要的符号连接。因为许多程序和脚本试图运行 `cc` 而不是 `gcc` ,这样做是为了让程序能在多种 Unix 平台上运行,并保持一致性。并不是每个人都安装 GNU C 编译器。只运行 `cc` 而不是 `gcc` 可以把选择 C 编译器的自由留给系统管理员,我们这里将指向 `gcc` : ``` ln -vs gcc /tools/bin/cc ``` 关于这个软件包的详细资料位于[节 6.12.2, GCC 的内容](../chapter06/gcc.html#contents-gcc "6.12.2\. GCC 的内容")
';