该软件包的详细信息在 6.13.2,“Binutils 软件包内容”中。
Binutils 软件包包括了一个链接器、汇编器和其它处理目标文件的工具。
返回前面章节重新阅读注意事项。了解标记为重要的注意事项能在后面帮你节省很多问题。
第一个编译 Binutils 软件包很重要,因为 Glibc 和 GCC 会对可用的链接器和汇编器执行各种测试以决定启用它们自己的哪些功能。
Binutils 手册建议在源码目录之外一个专门的编译目录里面编译 Binutils:
mkdir -v ../binutils-build cd ../binutils-build
为了衡量在本书中其余部分所使用 SBU 值,我们要测量一下这个软件包从配置到包括第一次安装在内的编译时间。为了轻松的做到这点,用类似 time { ./configure ... &&... && make install; }
的方式将命令包装在 time 命令中。
第五章中大概编译的 SBU 值和所需磁盘空间不包括测试套件数据。
现在准备编译 Binutils:
../binutils-2.25/configure \ --prefix=/tools \ --with-sysroot=$LFS \ --with-lib-path=/tools/lib \ --target=$LFS_TGT \ --disable-nls \ --disable-werror
配置选项的含义:
--prefix=/tools
告诉配置脚本将 Binutils 程序安装到 /tools
文件夹。
--with-sysroot=$LFS
用于交叉编译,告诉编译系统在 $LFS 中查找所需的目标系统库。
--with-lib-path=/tools/lib
指定需要配置使用的链接器的库路径。
--target=$LFS_TGT
因为 LFS_TGT
变量中的机器描述和 config.guess 脚本返回的值略有不同,这个选项会告诉 configure 脚本调整 Binutils 的编译系统来编译一个交叉链接器。
--disable-nls
这会禁止国际化(i18n),因为国际化对临时工具来说没有必要。
--disable-werror
这会防止来自宿主编译器的警告事件导致停止编译。
继续编译软件包:
make
现在编译完成了。通常现在我们会运行测试套件,但在这个初期阶段,测试套件框架(Tcl、Expect 和 DejaGNU) 还没有就绪。在此进行测试的好处不多,因为第一遍编译的程序很快会被第二遍的代替。
如果是在 x86_64 上编译,创建符号链接,以确保工具链的完整性:
case $(uname -m) in x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;; esac
安装软件包:
make install
该软件包的详细信息在 6.13.2,“Binutils 软件包内容”中。