%general-entities; ]> binutils &binutils-version;
&binutils-url;
Binutils-&binutils-version; Binutils <para>Binutils 包含汇编器、链接器以及其他用于处理目标文件的工具。</para> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> <seg>&binutils-ch6-sbu;</seg> <seg>&binutils-ch6-du;</seg> </seglistitem> </segmentedlist> </sect2> <sect2 role="installation"> <title>安装 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. 删除一项导致测试套件无法完成的测试: sed -i '/@\tincremental_copy/d' gold/testsuite/Makefile.in Binutils 文档推荐在一个专用的构建目录中构建 Binutils: mkdir -v build cd build 准备安装 Binutils: ../configure --prefix=/usr \ --enable-gold \ --enable-ld=default \ --enable-plugins \ --enable-shared \ --disable-werror \ --enable-64-bit-bfd \ --with-system-zlib 配置选项的含义: --enable-gold 构建 gold 链接器,并且将它(和默认链接器一起)安装为 ld.gold。 --enable-ld=default 构建传统的 bfd 链接器,并且将它安装为 ld (默认链接器) 和 ld.bfd。 --enable-plugins 启用链接器插件支持。 --enable-64-bit-bfd (在字长较小的宿主平台上)启用 64 位支持。 在 64 位平台上可能不需要,但无害。 --with-system-zlib 使用安装好的 zlib 库,而不是构建附带的版本。 编译该软件包: make tooldir=/usr make 命令选项的含义: tooldir=/usr 一般来说,工具目录(最终存放该软件包中可执行文件的目录) 被设定为 $(exec_prefix)/$(target_alias) 。例如,在 x86_64 机器上,它将展开为 /usr/x86_64-unknown-linux-gnu 。因为 LFS 是定制系统,不需要 /usr 中的特定目标工具目录。如果系统用于交叉编译 (例如,在 Intel 机器上编译软件包, 生成可以在 PowerPC 机器上执行的代码),, 就会使用 $(exec_prefix)/$(target_alias) 目录。 本节中,Binutils 的测试套件被认为是十分关键的, 在任何情况下都不能跳过。 测试编译结果: make -k check 已知 PC-relative offset 测试, 以及名为 debug_msg.sh 的一个测试可能失败。 安装该软件包: make tooldir=/usr install Binutils 的内容 安装的程序 安装的库 安装的目录 addr2line, ar, as, c++filt, dwp, elfedit, gprof, ld, ld.bfd, ld.gold, nm, objcopy, objdump, ranlib, readelf, size, strings, 以及 strip libbfd.{a,so} 和 libopcodes.{a,so} /usr/lib/ldscripts 简要描述 addr2line 将程序中的地址翻译成文件名和行号; 给定一个内存地址以及可执行程序的名字, 该程序使用可执行文件中的调试信息, 确定与该地址相关的源代码文件和行号。 addr2line ar 创建、修改、提取档案文件 ar as 一个能够汇编 gcc 输出的汇编代码并生成目标文件的汇编器 as c++filt 被链接器用于 demangle C++ 和 Java 符号, 防止重载函数冲突。 c++filt dwp DWARF 封装工具 dwp elfedit 更改 ELF 文件的 ELF 头 elfedit gprof 显示函数调用图性能分析数据 gprof ld 一个链接器,将一些对象文件和档案文件组合为一个单独的文件, 重定位它们的数据,并绑定符号引用 ld ld.gold ld 的一个裁减版,只支持 ELF 目标文件格式 ld.gold ld.bfd ld 的硬链接 ld.bfd nm 列出给定目标文件中的符号 nm objcopy 将一种目标文件翻译成另一种 objcopy objdump 显示给定目标文件的信息,通过命令行选项指定要显示哪些信息; 这些信息对开发编译工具的程序员很有用 objdump ranlib 生成档案文件内容的索引,并将索引存入档案文件; 索引列出档案文件中所有可重定位目标文件定义的符号 ranlib readelf 显示 ELF 格式二进制文件的信息 readelf size 列出给定文件各个段的大小和文件总大小 size strings 对于每个给定文件,输出其中长度不小于给定长度 (默认是 4)的可打印字符序列;对于目标文件, 它默认只输出可加载的已初始化数据段中的字符串, 对于其他文件,它扫描整个文件 strings strip 移除目标文件中的符号 strip libbfd 二进制文件描述符库 libbfd libopcodes 一个用于处理操作码 —— 处理器指令的 可读文本版本的库; 它被 objdump 等构建工具所使用 libopcodes