出售域名  LinuxTags

5.5. GCC-4.3.2 - 第一遍

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

预计编译时间: 22 SBU
所需磁盘空间: 1.1 GB

5.5.1. 安装 GCC

该版本的 GCC 需要 GMP 和 MPFR 软件包,你的宿主系统上可能没有安装这两个软件包,它们将一起编译进 GCC。

tar -jxf ../mpfr-2.3.2.tar.bz2
mv mpfr-2.3.2 mpfr
tar -jxf ../gmp-4.2.4.tar.bz2
mv gmp-4.2.4 gmp

GCC 的安装指南推荐用一个新建的目录来编译它,而不是在源码目录中:

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

准备编译 GCC:

CC="gcc -B/usr/bin/" ../gcc-4.3.2/configure --prefix=/tools \
    --with-local-prefix=/tools --disable-nls --disable-shared --disable-libssp \
    --enable-languages=c

配置选项的含义:

CC="gcc -B/usr/bin/"

该选项强制 gcc 使用宿主系统中 /usr/bin 目录下的连接器。这样做的必要是因为上一节新生成的 ld 可能与某些宿主系统的 gcc 不兼容。

--with-local-prefix=/tools

这个参数的目的是把 /usr/local/include 目录从 gcc 的 头文件搜索路径里删除。这并不是绝对必要,但能尽量减小宿主系统的影响。

--disable-shared

该开关强制 GCC 静态链接中间库,这样做是为了避免宿主系统可能带来的错误。

--disable-libssp

该开关是为了防止和旧版本的 glibc 的冲突,该冲突可能导致编译失败。

--enable-languages=c

该选项确保只编译 C 语言的编译器,现在我们只需要 C。

下面的命令会不只一次的编译 GCC,它会使用第一遍编译的程序来编译第二次,再利用第二次的结果进行第三次编译。然后对第二次和第三次的结果进行比较,确保能完全无差错的编译自身。这被称作“bootstrapping”。这样编译 GCC 可以保证其正确性。有了软件包的配置文件,运行下面命令进行下一步的编译:

make

编译完成之后,按通常情况要运行测试程序,但是如前面所述,测试框架还没有就位。在这里运行测试没什么用处,因为第一遍安装的程序很快就会被第二遍的程序所覆盖。

安装软件包:

make install

使用参数 --disable-shared 意味着文件 libgcc_eh.a 不会被编译和安装,而在编译 Glibc 时,由于使用了参数 -lgcc_eh,这会依赖 libgcc_eh.a 库。我们可以创建一个到 libgcc.a 的符号链接来满足这一依赖关系,因为该文件中通常包含了 libgcc_eh.a 中的内容。

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

最后,我们创建一个必要的符号连接。因为许多程序和脚本运行 cc 而不是 gcc,这是为了保持程序的通用性,使得在一些没有安装 GCC 的 UNIX 系统上也能运行。运行 cc 可以使系统管理员自由选择使用系统中不同的 C 语言编译器。

ln -vs gcc /tools/bin/cc

关于这个软件包的详细资料位于第 6.14.2 节 “GCC 的内容”


出售域名  LinuxTags

host by aosp.me  CDN