关于这个软件包的详细资料位于第 6.11.2 节 “Binutils 的内容”。
Binutils 是一组开发工具,包括连接器、汇编器和其他用于目标文件和档案的工具。
首先安装的第一个软件包是 Binutils ,这非常重要。因为 Glibc 和 GCC 会针对可用的连接器和汇编器进行多种测试,以决定是否打开某些特性。
Binutils 不能识别高于 4.9 版本的 Texinfo。应用下面的补丁修正这个问题:
patch -Np1 -i ../binutils-2.18-configure-1.patch
Binutils 的文档推荐用一个新建的目录来编译它,而不是在源码目录中:
mkdir -v ../binutils-build cd ../binutils-build
如果你想使用本书余下部份列出的 SBU 值,那么现在就要测量一下编译本软件包的时间。你可以用类似下面这样的time
命令来测量:time { ./configure ...
&& make && make install; }
现在开始准备编译:
CC="gcc -B/usr/bin/" ../binutils-2.18/configure \ --prefix=/tools --disable-nls --disable-werror
配置选项的含义:
CC="gcc
-B/usr/bin/"
该选项强制 gcc
使用宿主系统中 /usr/bin
目录下的连接器。这样做的必要是因为新生成的 ld 可能与某些宿主系统的 gcc 不兼容。
--prefix=/tools
这个参数告诉配置脚本,应该把 Binutils 软件包中的程序安装到 /tools
目录中。
--disable-nls
这个参数禁用国际化(通常简称 i18n),临时工具不需要国际化的特性。
--disable-werror
该参数防止编译工作在使用某些宿主系统的编译器给出警告信息时停止。
接下来编译它:
make
现在编译完成了。通常我们会运行测试套件,但是目前测试套件(Tcl、Expect 和 DejaGNU)尚未安装。而且在这里运行测试也没什么用处,因为第一遍安装的程序很快就会被第二遍的程序所覆盖。
安装它:
make install
下面为后面“调整工具链”做准备:
make -C ld clean make -C ld LIB_PATH=/tools/lib cp -v ld/ld-new /tools/bin
make 选项的含义:
-C ld
clean
告诉 make 程序删除所有 ld
子目录中编译生成的文件。
-C ld
LIB_PATH=/tools/lib
这个选项重新编译 ld
子目录中的所有文件。在命令行中指定
Makefile 的 LIB_PATH
变量值,使它明确指向临时工具目录,以覆盖默认值。这个变量的值指定了连接器的默认库搜索路径,它在这一章的稍后部分会用到。
关于这个软件包的详细资料位于第 6.11.2 节 “Binutils 的内容”。