有关此软件包的详细信息,请参阅 第 6.13.2 节,“Binutils 的内容”。
Binutils 软件包包含一个链接器、一个汇编器以及其他用于处理目标文件的工具。
重要的是 Binutils 必须是第一个被编译的软件包,因为 Glibc 和 GCC 都会对可用的链接器和汇编器执行各种测试,以确定启用哪些自身的功能。
已知当更改其默认优化标志(包括 -march 和 -mcpu 选项)时,此软件包会出现问题。如果定义了任何覆盖默认优化的环境变量,例如CFLAGS和CXXFLAGS,在构建 Binutils 时取消设置它们。
如果您是从运行 Gcc-4 或更高版本的主机构建,则必须修补此版本 Binutils 的首次构建,以便它可以由主机系统编译。
patch -Np1 -i ../binutils-2.15.94.0.2.2-gcc4-1.patch
Binutils 文档建议在源目录之外的专用构建目录中构建 Binutils
mkdir -v ../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 选项的含义
这告诉 configure 脚本准备将 Binutils 程序安装在/tools目录中。
这禁用了国际化,因为临时工具不需要 i18n。
继续编译软件包
make
编译现已完成。通常我们现在会运行测试套件,但在这个早期阶段,测试套件框架(Tcl、Expect 和 DejaGNU)尚未就绪。此时运行测试的好处是最小的,因为第一次传递中的程序很快将被第二次传递中的程序替换。
安装软件包
make install
接下来,为稍后的“调整”阶段准备链接器
make -C ld clean make -C ld LIB_PATH=/tools/lib
make 参数的含义
这告诉 make 程序删除ld子目录中的所有已编译文件。
此选项重建ld子目录中的所有内容。在命令行上指定LIB_PATHMakefile 变量允许我们覆盖默认值,并将其指向临时工具位置。此变量的值指定链接器的默认库搜索路径。此准备工作在本书后面的章节中使用。
不要 移除 Binutils 构建和源目录。在本章的后面部分将再次需要它们当前的原始状态。
有关此软件包的详细信息,请参阅 第 6.13.2 节,“Binutils 的内容”。