6.13. Binutils-2.23.2
Binutils 程序包包含链接器、汇编器和其他用于处理对象文件的工具。
6.13.1. 安装 Binutils
运行一个简单的测试确认 PTY 在 chroot 环境中正常工作:
expect -c "spawn ls"
此命令应该输出以下信息:
spawn ls
如果输出包含以下消息,那就意味着环境没有为 PTY 操作设置好。此问题需要在运行 Binutils 和 GCC 的测试套件之前解决:
The system has no more ptys.
Ask your system administrator to create more.
阻止安装一个过时的 standards.info
文件,因为稍后在 Autoconf 指令中会安装一个更新的:
rm -fv etc/standards.info sed -i.bak '/^INFO/s/standards.info //' etc/Makefile.in
Fix a couple of syntax errors that prevent the documentation from building with Texinfo-5.1:
sed -i -e 's/@colophon/@@colophon/' \ -e 's/doc@cygnus.com/doc@@cygnus.com/' bfd/doc/bfd.texinfo
Binutils 文档推荐在源代码目录外另建目录编制 Binutils:
mkdir -v ../binutils-build cd ../binutils-build
准备编译 Binutils:
../binutils-2.23.2/configure --prefix=/usr --enable-shared
![[注意]](http://davidgao.github.io/LFSCN/images/note.png)
注意
configure 还有一个可选参数,--enable-lto
,可以用于允许 ar、nm 和 ranlib 命令接受 --plugin
参数,进而允许 gcc 在需要的时候进行 “链接时优化”。LFS 和 BLFS 中现在都没有程序包使用此功能。
编译程序包:
make tooldir=/usr
make 参数的含义:
-
通常,tooldir (所有的可执行文件所在的目录) 设置为
$(exec_prefix)/$(target_alias)
。例如,x86_64 计算机上会是/usr/x86_64-unknown-linux-gnu
。因为这是自定义的系统,/usr
中这个针对平台的目录并不需要。如果系统要进行交叉编译 (例如在 Intel 计算机上编译程序包产生用于 PowerPC 计算机的代码),会使用$(exec_prefix)/$(target_alias)
。
tooldir=/usr
![[重要]](http://davidgao.github.io/LFSCN/images/important.png)
重要
本节中 Binutils 的测试套件是十分重要的。任何情况下都不要跳过。
测试结果:
make check
安装程序包:
make tooldir=/usr install
安装某些程序包需要的 libiberty
头文件:
cp -v ../binutils-2.23.2/include/libiberty.h /usr/include
6.13.2. Binutils 的内容
简介
将程序地址翻译成文件名和行号;给定地址和可执行文件名称,它使用其中的调试信息判断与此地址有关联的源文件和行号 | |
创建、修改和提取归档 | |
一个汇编器,将 gcc 的输出汇编为对象文件 into object files | |
被链接器用于修复 C++ 和 Java 符号,防止重载的函数相互冲突 | |
更新 ELF 文件的 ELF 头 | |
显示分析数据的调用图表 | |
一个链接器,将几个对象和归档文件组合成一个文件,重新定位它们的数据并且捆绑符号索引 | |
到 ld 的硬链接 | |
列出给定对象文件中出现的符号 | |
将一种对象文件翻译成另一种 | |
显示有关给定对象文件的信息,包含指定显示信息的选项;显示的信息对编译工具开发者很有用 | |
创建一个归档的内容索引并存储在归档内;索引列出其成员中可重定位的对象文件定义的所有符号 | |
显示有关 ELF 二进制文件的信息 | |
列出给定对象文件每个部分的尺寸和总尺寸 | |
对每个给定的文件输出不短于指定长度 (默认为 4) 的所有可打印字符序列;对于对象文件默认只打印初始化和加载部分的字符串,否则扫描整个文件 | |
移除对象文件中的符号 | |
包含多个 GNU 程序会使用的途径,包括 getopt、obstack、strerror、strtol 和 strtoul | |
二进制文件描述器库 | |
一个库,用于处理 opcodes——处理器指令的 “可读文本” 版本;用于编制 objdump 这样的工具 |