6.13. Binutils-2.15.94.0.2.2

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

预计构建时间: 1.3 SBU
所需磁盘空间: 158 MB
安装依赖于: Bash, Bison, Coreutils, Diffutils, Flex, GCC, Gettext, Glibc, Grep, M4, Make, Perl, Sed, 和 Texinfo

6.13.1. Binutils 的安装

已知当 Binutils 的默认优化标志(包括 -march-mcpu 选项)被更改时,此软件包会出现问题。如果定义了任何覆盖默认优化的环境变量,例如CFLAGSCXXFLAGS,在构建 Binutils 时取消设置它们。

验证 PTY 在 chroot 环境中是否正常工作。通过执行一个简单的测试来检查一切是否设置正确

expect -c "spawn ls"

如果出现以下消息,则 chroot 环境未设置为正确的 PTY 操作

The system has no more ptys.  
Ask your system administrator to create more.

在为 Binutils 和 GCC 运行测试套件之前,需要解决此问题。

Binutils 文档建议在源目录之外的专用构建目录中构建 Binutils

mkdir -v ../binutils-build
cd ../binutils-build

准备编译 Binutils

../binutils-2.15.94.0.2.2/configure --prefix=/usr \
    --enable-shared

编译软件包

make tooldir=/usr

通常,tooldir(可执行文件最终所在的目录)设置为$(exec_prefix)/$(target_alias)。例如,i686 机器会将其扩展为/usr/i686-pc-linux-gnu。因为这是一个自定义系统,所以在/usr中的这个特定于目标的目录不是必需的。$(exec_prefix)/$(target_alias)如果系统用于交叉编译(例如,在 Intel 机器上编译一个软件包,该软件包生成可以在 PowerPC 机器上执行的代码),则会使用它。

[Important]

重要

本节中 Binutils 的测试套件被认为是至关重要的。在任何情况下都不要跳过它。

测试结果

make check

安装软件包

make tooldir=/usr install

安装libiberty一些软件包需要的头文件

cp -v ../binutils-2.15.94.0.2.2/include/libiberty.h /usr/include

6.13.2. Binutils 的内容

已安装的程序: addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings, 和 strip
已安装的库: libiberty.a, libbfd.[a,so], 和 libopcodes.[a,so]

简短描述

addr2line

将程序地址转换为文件名和行号;给定一个地址和一个可执行文件的名称,它使用可执行文件中的调试信息来确定与该地址关联的源文件和行号

ar

创建、修改和从归档文件中提取文件

as

一个汇编器,将 gcc 的输出汇编成目标文件

c++filt

供链接器使用,用于反修饰 C++ 和 Java 符号,并防止重载函数冲突

gprof

显示调用图分析数据

ld

一个链接器,将多个目标文件和归档文件组合成一个单独的文件,重新定位它们的数据并连接符号引用

nm

列出给定目标文件中出现的符号

objcopy

将一种类型的目标文件转换为另一种类型

objdump

显示有关给定目标文件的信息,选项控制要显示的特定信息;显示的信息对于正在开发编译工具的程序员很有用

ranlib

生成归档文件内容的索引并将其存储在归档文件中;该索引列出了归档成员定义的所有符号,这些成员是可重定位的目标文件

readelf

显示有关 ELF 类型二进制文件的信息

size

列出给定目标文件的节大小和总大小

strings

对于每个给定文件,输出至少为指定长度(默认为四个)的可打印字符序列;对于目标文件,默认情况下,它仅打印来自初始化和加载节的字符串,而对于其他类型的文件,它会扫描整个文件

strip

从目标文件中丢弃符号

libiberty

包含各种 GNU 程序使用的例程,包括 getopt, obstack, strerror, strtol, 和 strtoul

libbfd

二进制文件描述符库

libopcodes

一个用于处理操作码的库——处理器指令的“可读文本”版本;它用于构建像 objdump 这样的实用程序。