这个软件包的详细内容位于 Section 6.16.2, “ GCC 的内容 ”
GCC 软件包包含 GNU 编译器集合,其中有 C 和 C++ 编译器。
现在,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 的内容 ”