关于这个软件包的详细资料位于第 6.14.2 节 “GCC 的内容”。
GCC 软件包包含 GNU 编译器,其中有 C 和 C++ 编译器。
该版本的 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 的内容”。