关于这个软件包的详细资料位于 Section 6.13.2, “Contents of Binutils.”
Binutils 是一组开发工具,包括连接器,汇编器和其他用于目标文件和档案的工具。
第一个安装的软件包是 Binutils,这非常重要,因为 Glibc 和 GCC 会针对可用的连接器和汇编器进行多种测试,以决定打开某些特性。
如果你把这个包缺省的优化参数(包括 -march 和 -mcpu 参数)改变的话,它会有些不正常的表现。因此,如果你定义了任何优化参数的话,比如 CFLAGS 和 CXXFLAGS,我们劝你在编译 Binutils 时 unset 或修改它们。
Binutils 的文档推荐用一个新建的目录来编译它,而不是在源码目录中:
mkdir ../binutils-build cd ../binutils-build
如果你想利用本书余下部份列出的SBU值,那么现在就要测量一下编译本软件包的时间。你可以用类似于下面这样的time命令:time { ./configure ... && make && make install; }
现在为编译 Binutils 作准备:
../binutils-2.15.94.0.2.2/configure --prefix=/tools --disable-nls
配置选项的意思是:
这个参数告诉 configure 脚本,应该把 Binutils 软件包中的程序安装到 /tools 目录中。
这个参数禁止了国际化(通常简称i18n)。静态程序不需要国际化的特性,并且在静态连接时nls常常引起错误。
接下来编译它:
make
现在编译完成了。通常我们会运行测试套件,但是目前测试套件(Tcl, Expect, DejaGNU)尚未安装。而且在这里运行测试也没什么好处,因为第一遍安装的程序很快就会被第二遍的程序所覆盖。
现在安装软件包:
make install
现在,为后面“调整”glibc准备连接器:
make -C ld clean make -C ld LIB_PATH=/tools/lib
make 参数的意思是:
告诉make,删除所有子目录 ld 中编译生成的文件。
这个选项重新编译 ld 子目录中的所有文件。LIB_PATH 是 Makefile 的一个变量,在命令行里指定它,使我们可以覆盖默认值,并让它指向临时工具目录。这个变量的值指定了连接器的缺省库搜索路径。在这一章的稍后部分会用到。
现在不能删除Binutils的编译目录和源码目录,我们在本章后面部份还要用到它们,所以请别动它们。
关于这个软件包的详细资料位于 Section 6.13.2, “Contents of Binutils.”