5.5. GCC-4.4.3 - 第一遍

GCC 软件包包含 GNU 编译器集合,其中有 C 和 C++ 编译器。

预计编译时间: 5.0 SBU
所需磁盘空间: 809 MB

5.5.1. 安装交叉编译 GCC

现在,GCC 需要 GMP 和 MPFR 软件包。 因为你的宿主系统可能不包含这些软件包, 所以, 它们要和 GCC 一起编译:

tar -jxf ../mpfr-2.4.2.tar.bz2
mv -v mpfr-2.4.2 mpfr
tar -jxf ../gmp-5.0.0.tar.bz2
mv -v gmp-5.0.0 gmp

GCC 的文档推荐创建一个专用目录来编译它,而不是在源码目录中:

mkdir -v ../gcc-build
cd ../gcc-build

为编译 GCC 做准备:

../gcc-4.4.3/configure \
    --target=$LFS_TGT --prefix=/tools \
    --disable-nls --disable-shared --disable-multilib \
    --disable-decimal-float --disable-threads \
    --disable-libmudflap --disable-libssp \
    --disable-libgomp --enable-languages=c

配置选项的含义:

--disable-shared

该参数强制 GCC 链接其内部的静态库。 我们这样做是为了避免和宿主系统产生问题。

--disable-decimal-float, --disable-threads, --disable-libmudflap, --disable-libssp, --disable-libgomp

这些参数分别禁用了十进制浮点运算、线程、 libmudflap, libssp 和 libgomp 的支持。 这些功能在建立交叉编译器时会造成编译失败,而且,在交叉编译临时libc 的任务中也不是必需的。

--disable-multilib

在 x86_64 架构上, LFS 系统还不支持 multilib 的配置。 这个参数对x86架构是无害的。

--enable-languages=c

这个参数确保只建立 C 编译器。我们现在只需要这一种编译器。

编译 GCC:

make

现在编译完成了。 通常我们会在这里运行测试套件,但是正如前面说过的, 测试套件目前尚未 安装, 而且在这里运行测试没什么用处, 因为第一遍安装的程序很快就会被第二遍的程序所 覆盖。

安装这个软件包:

make install

使用 --disable-shared 参数的意思是不编译和安装 libgcc_eh.a 文件。Glibc 软件包依赖这个库, 因为它使用其内部的 -lgcc_eh 来创建系统。 这种依赖性,可通过建立一个指向 libgcc.a 符号链接得到满足, 因为该文件最终将含有通常在 libgcc_eh.a 中的 对象:

ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | \
    sed 's/libgcc/&_eh/'`

这个软件包的详细内容位于 Section 6.16.2, “ GCC 的内容 ”