5.3. Binutils-2.15.94.0.2.2 - 第一遍

Binutils 是一组开发工具,包括连接器,汇编器和其他用于目标文件和档案的工具。

预计编译时间: 1.0 SBU
所需磁盘空间: 179 MB
安装依赖于: Bash, Bison, Coreutils, Diffutils, Flex, GCC, Gettext, Glibc, Grep, M4, Make, Perl, Sed, Texinfo

5.3.1. 安装 Binutils

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

如果你把这个包缺省的优化参数(包括 -march-mcpu 参数)改变的话,它会有些不正常的表现。因此,如果你定义了任何优化参数的话,比如 CFLAGSCXXFLAGS ,我们劝你在编译时 unset 或修改它们。

如果宿主系统使用的是 GCC 4.0 或以上的版本,则需要在第一编编译 Binutils 时使用下面这个补丁,这样才能成功的完成编译。

patch -Np1 -i ../binutils-2.15.94.0.2.2-gcc4-1.patch

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

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

注意

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

现在为编译 Binutils 作准备:

../binutils-2.15.94.0.2.2/configure --prefix=/tools --disable-nls

配置选项的意思是:

--prefix=/tools

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

--disable-nls

这个参数禁止了国际化(通常简称i18n),静态程序不需要国际化的特性。

接下来编译它:

make

现在编译完成了。通常我们会运行测试套件,但是目前测试套件(Tcl, Expect, DejaGNU)尚未安装。而且在这里运行测试也没什么用处,因为第一遍安装的程序很快就会被第二遍的程序所覆盖。

安装软件包:

make install

接下来为后面"调整"步骤准备连接器:

make -C ld clean
make -C ld LIB_PATH=/tools/lib

make 参数的意思是:

-C ld clean

告诉 make 程序删除所有 ld 子目录中编译生成的文件。

-C ld LIB_PATH=/tools/lib

这个选项重新编译 ld 子目录中的所有文件。在命令行中指定 Makefile 的 LIB_PATH 变量值,使它明确指向临时工具目录,以覆盖默认值。这个变量的值指定了连接器的默认库搜索路径,它在这一章的稍后部分会用到。

[Warning]

警告

现在不能删除 Binutils 的编译目录和源码目录,我们在本章后面部份还要用到它们。

关于这个软件包的详细资料位于 Section 6.13.2, "Contents of Binutils."