6.13. Binutils-2.25

Binutils 软件包包含一个链接器、一个汇编器、以及其它处理目标文件的工具。

大概编译时间: 2.2 SBU
需要磁盘空间: 473 MB

6.13.1. 安装 Binutils

通过一个简单测试验证在 chroot 环境下 PTY 工作正常:

expect -c "spawn ls"

这个命令应该输出以下内容:

spawn ls

假如输出包括下面的信息,那么表示没有为 PTY 操作设置好环境。在运行 Binutils 和 GCC 的测试套件之前需要解决这个问题:



The system has no more ptys.


Ask your system administrator to create more.


Binutils 的文档建议在源文件目录之外一个专用的编译目录编译 Binutils:



mkdir -v ../binutils-build


cd ../binutils-build


准备编译 Binutils:



../binutils-2.25/configure --prefix=/usr   \


                           --enable-shared \


                           --disable-werror


编译软件包:



make tooldir=/usr


make 参数的含义:

tooldir=/usr

一般来说,tooldir (最终存放可执行文件的目录) 设置为 $(exec_prefix)/$(target_alias)。例如,x86_64 机器会把它扩展为/usr/x86_64-unknown-linux-gnu。因为这是个自定制的系统,并不需要 /usr 中的特定目标目录。如果系统用于交叉编译(例如,在 Intel 机器上编译能生成在 PowerPC 机器上运行的代码的软件包)会使用 $(exec_prefix)/$(target_alias)

[Important]

重要

本章节中的 Binutils 测试套件至关重要,任何情况下都不能跳过。

查看结果:



make -k check


安装软件包:



make tooldir=/usr install


6.13.2.Binutils 内容

安装的程序: addr2line, ar, as, c++filt, elfedit, gprof, ld, ld.bfd, nm, objcopy, objdump, ranlib, readelf, size, strings, 和 strip
安装的库: libbfd.{a,so} 和 libopcodes.{a,so}
安装目录: /usr/lib/ldscripts

简要介绍

addr2line

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

ar

创建、更改以及抽取归档文件。

as

一个将 gcc 的输出汇编到目标文件的汇编器。

c++filt

链接器用来过滤 C++ 和 Java 符号以及防止重载函数冲突。

elfedit

更新 ELF 文件的 ELF 文件头

gprof

显示调用关系图配置数据

ld

一个将多个目标文件和归档文件合并为单一文件,重定位数据及绑定符号引用的链接器。

ld.bfd

ld 的硬链接。

nm

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

objcopy

转换某种类型的目标文件到另一种类型

objdump

显示给定目标文件的信息,用选项可以控制显示特定信息;显示的信息对于使用编译工具的程序员非常有用。

ranlib

生成归档文件内容的索引并保存到归档文件;索引列出了所有归档文件成员——可重定位的目标文件定义的符号。

readelf

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

size

列出所给目标文件各部分大小和总的大小

strings

对每个给定文件,输出不低于指定长度(默认是4)的可打印字符序列;对于目标文件,它默认只打印初始化和引导部分的字符串,而对于其它类型的文件扫描整个文件。

strip

从目标文件中去除符号

libbfd

二进制文件描述库

libopcodes

用于处理操作码—处理器指令的可读文本版本 的库;用于构建类似 objdump 的工具。

Host by Unixetc