5.4. Binutils-2.20 - 第一遍

Binutils 软件包包含一个链接器,一个汇编器和其他处理目标文件的工具。

预计编译时间: 1 SBU
所需磁盘空间: 248 MB

5.4.1. 安装交叉编译 Binutils

[Note]

注意

回头重新阅读上节中的注意事项。理解这些标记的 “note” 对于你以后节省大量问题很重要。

安装的第一个软件包是 Binutils ,这非常重要,因为 Glibc 和 GCC 会针对可用的连接器 和汇编器进行多种测试,以决定启用它们自己的哪些特性。

Binutils 的文档推荐创建一个专用目录来编译它,而不是在源码目录中:

mkdir -v ../binutils-build
cd ../binutils-build
[Note]

注意

如果你想使用本书余下部份列出的 SBU 值, 那么现在就要测量一下编译本软件包的时间。 你可以用类似于下面这样的 time 命令 : time { ./configure ... && make && make install; }.

现在为编译 Binutils 作准备:

../binutils-2.20/configure \
    --target=$LFS_TGT --prefix=/tools \
    --disable-nls --disable-werror

配置选项的含义:

--target=$LFS_TGT

因为 LFS_TGT 变量中的机器描述和 config.guess 脚本的返回值略有不同, 所以, 这个开关会告诉 configure 脚本,为了创建交叉链接器,要调整Binutil 的编译系统。

--prefix=/tools

这个参数告诉 configure 脚本,准备把 Binutils 软件包中的程序安装到 /tools 目录中。

--disable-nls

这个参数禁止了国际化(通常简称i18n --译者),因为临时工具不需要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

这个软件包的详细内容位于 Section 6.12.2, “ Binutils 的内容 ”