GCC 软件包包含 GNU 编译器,其中有 C 和 C++ 编译器。
如果你把这个包缺省的优化参数(包括 -march 和 -mcpu 参数)改变的话,它会有些不正常的表现。因此,如果你定义了任何优化参数的话,比如 CFLAGS 和 CXXFLAGS ,我们劝你在编译时 unset 或修改它们。
首先,运用前一章里用过的 No-Fixincludes 补丁:
patch -Np1 -i ../gcc-3.4.3-no_fixincludes-1.patch
在一个超越基本 LFS 的系统上(如安装了 Mozilla 和 KDE),当 GCC 联合使用 Binutils 的新版本进行一些软件包的编译时会失败。下面这个补丁可以修正这个错误:
patch -Np1 -i ../gcc-3.4.3-linkonce-1.patch
[勘误]如果在编译 GCC-3.4.3 时使用的是 2.6.12 以上版本的内核,将会导致测试程序出现多处失败,这是由于这些高版本内核中增加的新特性导致的。如果你的宿主系统内核是 2.6.12 或更高版本,请从http://www.linuxfromscratch.org/patches/downloads/gcc/gcc-3.4.3-pch-1.patch下载可以修复该问题的补丁,并应用它:
patch -Np1 -i ../gcc-3.4.3-pch-1.patch
使用一个 sed 命令来禁止 GCC 安装它自己的 libiberty.a 。我们将使用 Binutils 附带的 libiberty.a 来代替:
sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
GCC 的安装指南推荐用一个新建的目录来编译它,而不是在源码目录中:
mkdir -v ../gcc-build cd ../gcc-build
为编译 GCC 做准备:
../gcc-3.4.3/configure --prefix=/usr \ --libexecdir=/usr/lib --enable-shared \ --enable-threads=posix --enable-__cxa_atexit \ --enable-clocale=gnu --enable-languages=c,c++
编译软件包:
make
本节的GCC测试套件很重要。在任何情况下都不要省略这一步。
运行测试套件,但遇到错误不停止(你还记得那些老是出错的测试吧):
make -k check
Section 5.11, "GCC-3.4.3 - Pass 2," 里的测试套件说明对这里也同样适用,请参考一下它的内容。
安装软件包:
make install
有的软件包希望 C PreProcessor(预处理器)安装在 /lib 目录下,为了满足它们的要求,我们创建如下符号链接:
ln -sv ../usr/bin/cpp /lib
许多软件包使用 cc 作为 C 编译器的名字,为了满足它们的要求,创建如下符号链接:
ln -sv gcc /usr/bin/cc
这里,我们强烈推荐运行一下本章前面进行过的合理性测试。请参考 Section 6.12, "再次调整工具链" 并重复测试。如果结果错了,可能是因为你没有正确使用 Chapter 5 中的 GCC Specs 补丁。