5.2. Binutils-2.43.1 - 第一遍

Binutils 包含汇编器、链接器以及其他用于处理目标文件的工具。

估计构建时间: 1 SBU
需要硬盘空间: 677 MB

5.2.1. 安装交叉工具链中的 Binutils

[注意]

注意

返回并重新阅读编译过程的一般说明一节。仔细理解那些标为“重要”的说明,以防止之后出现问题。

首先构建 Binutils 相当重要,因为 Glibc 和 GCC 都会对可用的链接器和汇编器进行测试,以决定可以启用它们自带的哪些特性。

Binutils 文档推荐创建一个新的目录,以在其中构建 Binutils:

mkdir -v build
cd       build
[注意]

注意

为了衡量本书其余部分使用的 SBU 值,需要测量本软件包从配置开始直到第一次安装花费的时间。为了容易地完成测量,可以将命令包装在 time 命令中,就像这样:time { ../configure ... && make && make install; }

现在,准备编译 Binutils:

../configure --prefix=$LFS/tools \
             --with-sysroot=$LFS \
             --target=$LFS_TGT   \
             --disable-nls       \
             --enable-gprofng=no \
             --disable-werror    \
             --enable-new-dtags  \
             --enable-default-hash-style=gnu

配置选项的含义:

--prefix=$LFS/tools

这告诉配置脚本准备将 Binutils 程序安装在 $LFS/tools 目录中。

--with-sysroot=$LFS

该选项告诉构建系统,交叉编译时在 $LFS 中寻找目标系统的库。

--target=$LFS_TGT

由于 LFS_TGT 变量中的机器描述和 config.guess 脚本的输出略有不同, 这个开关使得 configure 脚本调整 Binutils 的构建系统,以构建交叉链接器。

--disable-nls

该选项禁用临时工具不需要的国际化功能。

--enable-gprofng=no

该选项禁用临时工具不需要的 gprofng 工具。

--disable-werror

该选项防止宿主系统编译器警告导致构建失败。

--enable-new-dtags

该选项使得链接器使用runpath标记在可执行程序和共享库中嵌入库文件搜索路径,而非传统的rpath标记。这样能使得调试动态链接的可执行程序更容易,且能绕过一些软件包的测试套件中潜藏的问题。

--enable-default-hash-style=gnu

默认情况下,链接器会为共享库和动态链接的可执行文件同时生成 GNU 风格的散列表和经典的 ELF 散列表。散列表仅供动态链接器进行符号查询。LFS 系统的动态链接器 (由 Glibc 软件包提供) 总是使用查询更快的 GNU 风格散列表。因此经典 ELF 散列表完全没有意义。该选项使得链接器在默认情况下只生成 GNU 风格散列表,以避免为生成和存储经典 ELF 散列表浪费时间和空间。

然后编译该软件包:

make

安装该软件包:

make install

该软件包的更多信息可以在第 8.20.2 节 “Binutils 的内容”中找到。