<< Back to man.ChinaUnix.net

6.14. GCC-3.4.3

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

预计编译时间: 11.7 SBU
所需磁盘空间: 451 MB
安装依赖于: Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, Gettext, Glibc, Grep, Make, Perl, Sed, Texinfo

6.14.1. 安装 GCC

如果你把这个包缺省的优化参数(包括 -march-mcpu 参数)改变的话,它会有些不正常的表现。因此,如果你定义了任何优化参数的话,比如 CFLAGSCXXFLAGS ,我们劝你在编译时 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
[Important]

重要

本节的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
[Note]

注意

这里,我们强烈推荐运行一下本章前面进行过的合理性测试。请参考 Section 6.12, "再次调整工具链" 并重复测试。如果结果错了,可能是因为你没有正确使用 Chapter 5 中的 GCC Specs 补丁。

6.14.2. GCC 的内容

安装的程序: c++, cc (链接到 gcc), cpp, g++, gcc, gccbug, gcov
安装的库: libgcc.a, libgcc_eh.a, libgcc_s.so, libstdc++.[a,so], libsupc++.a

简要描述

cc

C 编译器

cpp

C 预处理器。编译器用它来将 #include 和 #define 这类声明在源文件中展开。

c++

C++ 编译器

g++

C++ 编译器

gcc

C 编译器

gccbug

一个shell脚本,帮助创建有价值的 bug 报告。

gcov

覆盖测试工具,用来分析在程序的哪里做优化的效果最好。

libgcc

gcc 的运行时库

libstdc++

准 C++ 库,包含许多常用的函数。

libsupc++

为 C++ 语言提供支持的库函数。