该软件包的详细信息位于 第 6.16.2 节 「Binutils 内容」。
Binutils 软件包包含一个链接器、一个汇编器、以及其它处理目标文件的工具。
返回前面章节重新阅读注意事项。了解标记为重要的注意事项能在后面帮你省去很多麻烦。
第一个编译的软件包是 Binutils 软件包,这点很重要,因为 Glibc 和 GCC 都会对可用的链接器和汇编器执行各种测试,以决定启用它们自身的哪些功能。
Binutils 手册建议,在源码目录之外一个专门的编译目录里面编译 Binutils:
mkdir -v build cd build
为了衡量在本书中其余部分所使用 SBU
值,我们要测量一下这个软件包从配置到包括第一次安装在内的编译时间。为了轻松的做到这点,会用类似 time { ./configure ... && ...
&& make install; }
的方式将命令包裹在 time 命令中。
第五章中,大致的构建 SBU 值和所需磁盘空间不包括测试套件数据。
现在准备编译 Binutils:
../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.16.2 节 「Binutils 内容」。