Files
master/chapter06/binutils.html
2015-05-23 18:50:06 +08:00

477 lines
16 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content=
"application/xhtml+xml; charset=utf-8" />
<title>
6.13.&nbsp;Binutils-2.25
</title>
<link rel="stylesheet" type="text/css" href="../stylesheets/lfs.css" />
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1" />
<link rel="stylesheet" href="../stylesheets/lfs-print.css" type="text/css"
media="print" />
</head>
<body class="lfs" id="lfs-7.7-systemd">
<div class="navheader">
<h4>
Linux From Scratch - Version 7.7-systemd
</h4>
<h3>
第六章&nbsp;安装基本的系统软件
</h3>
<ul>
<li class="prev">
<a accesskey="p" href="file.html" title="File-5.22">上一页</a>
<p>
File-5.22
</p>
</li>
<li class="next">
<a accesskey="n" href="gmp.html" title="GMP-6.0.0a">下一页</a>
<p>
GMP-6.0.0a
</p>
</li>
<li class="up">
<a accesskey="u" href="chapter06.html" title=
"第六章&nbsp;安装基本的系统软件">返回</a>
</li>
<li class="home">
<a accesskey="h" href="../index.html" title=
"Linux From Scratch - Version 7.7-systemd">主页</a>
</li>
</ul>
</div>
<div class="wrap" lang="en" xml:lang="en">
<h1 class="sect1">
<a id="ch-system-binutils" name="ch-system-binutils"></a>6.13.
Binutils-2.25
</h1>
<div class="package" lang="en" xml:lang="en">
<p>
Binutils 软件包包含一个链接器、一个汇编器、以及其它处理目标文件的工具。
</p>
<div class="segmentedlist">
<div class="seglistitem">
<div class="seg">
<strong class="segtitle">大概编译时间:</strong>
<span class="segbody">2.2 SBU</span>
</div>
<div class="seg">
<strong class="segtitle">需要磁盘空间:</strong>
<span class="segbody">473 MB</span>
</div>
</div>
</div>
</div>
<div class="installation" lang="en" xml:lang="en">
<h2 class="sect2">
6.13.1. 安装 Binutils
</h2>
<p>
通过一个简单测试验证 PTYs 能在 chroot 环境下正常工作:
</p>
<pre class="userinput">
<kbd class="command">expect -c "spawn ls"</kbd>
</pre>
<p>
这个命令应该输出以下内容:
</p>
<pre class="screen">
<code class="computeroutput">spawn ls</code>
</pre>
<p>
假如输出包括下面的信息,那么表示没有为 PTY 操作设置好环境。在运行 Binutils 和 GCC 的测试套件之前需要解决这个问题:
</p>
<pre class="screen">
<code class="computeroutput">The system has no more ptys.
Ask your system administrator to create more.</code>
</pre>
<p>
Binutils 指南建议在源文件目录之外一个专用的编译目录编译 Binutils
</p>
<pre class="userinput">
<kbd class="command">mkdir -v ../binutils-build
cd ../binutils-build</kbd>
</pre>
<p>
准备编译 Binutils:
</p>
<pre class="userinput">
<kbd class="command">../binutils-2.25/configure --prefix=/usr \
--enable-shared \
--disable-werror</kbd>
</pre>
<p>
编译软件包:
</p>
<pre class="userinput">
<kbd class="command">make tooldir=/usr</kbd>
</pre>
<div class="variablelist">
<p class="title">
<strong>make 参数的含义:</strong>
</p>
<dl class="variablelist">
<dt>
<span class="term"><em class=
"parameter"><code>tooldir=/usr</code></em></span>
</dt>
<dd>
<p>
一般来说tooldir (最终存放可执行文件的目录) 设置为
<code class="filename">$(exec_prefix)/$(target_alias)</code>。例如x86_64 机器会把它扩展为<code class=
"filename">/usr/x86_64-unknown-linux-gnu</code>。因为这是个自定制的系统,并不需要 <code class="filename">/usr</code>
中的特定目标目录。如果系统用于交叉编译(例如,在 Intel 机器上编译能生成在 PowerPC 机器上运行的代码的软件包)会使用
<code class="filename">$(exec_prefix)/$(target_alias)</code>
</p>
</dd>
</dl>
</div>
<div class="admon important">
<img alt="[Important]" src="../images/important.png" />
<h3>
重要
</h3>
<p>
该章节 Binutils 的测试套件至关重要,任何情况下都不能跳过。
</p>
</div>
<p>
查看结果:
</p>
<pre class="userinput">
<kbd class="command">make -k check</kbd>
</pre>
<p>
安装软件包:
</p>
<pre class="userinput">
<kbd class="command">make tooldir=/usr install</kbd>
</pre>
</div>
<div class="content" lang="en" xml:lang="en">
<h2 class="sect2">
<a id="contents-binutils" name="contents-binutils"></a>6.13.2.Binutils 内容
</h2>
<div class="segmentedlist">
<div class="seglistitem">
<div class="seg">
<strong class="segtitle">安装的程序:</strong>
<span class="segbody">addr2line, ar, as, c++filt, elfedit,
gprof, ld, ld.bfd, nm, objcopy, objdump, ranlib, readelf, size,
strings, and strip</span>
</div>
<div class="seg">
<strong class="segtitle">安装的库:</strong>
<span class="segbody">libbfd.{a,so} and
libopcodes.{a,so}</span>
</div>
<div class="seg">
<strong class="segtitle">安装目录:</strong>
<span class="segbody">/usr/lib/ldscripts</span>
</div>
</div>
</div>
<div class="variablelist">
<h3>
简要介绍
</h3>
<table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top" />
<col />
</colgroup>
<tbody>
<tr>
<td>
<p>
<a id="addr2line" name="addr2line"></a><span class=
"term"><span class=
"command"><strong>addr2line</strong></span></span>
</p>
</td>
<td>
<p>
转换程序地址为文件名称和行号;给定一个地址和可执行文件的名称,它使用可执行文件的调试信息判断和地址关联的源文件以及行号。
</p>
</td>
</tr>
<tr>
<td>
<p>
<a id="ar" name="ar"></a><span class="term"><span class=
"command"><strong>ar</strong></span></span>
</p>
</td>
<td>
<p>
创建、更改以及抽取归档文件。
</p>
</td>
</tr>
<tr>
<td>
<p>
<a id="as" name="as"></a><span class="term"><span class=
"command"><strong>as</strong></span></span>
</p>
</td>
<td>
<p>
一个将<span class=
"command"><strong>gcc</strong></span> 的输出汇编到目标文件的汇编器。
</p>
</td>
</tr>
<tr>
<td>
<p>
<a id="c-filt" name="c-filt"></a><span class=
"term"><span class=
"command"><strong>c++filt</strong></span></span>
</p>
</td>
<td>
<p>
链接器用来过滤 C++ 和 Java 符号以及防止重载函数冲突。
</p>
</td>
</tr>
<tr>
<td>
<p>
<a id="elfedit" name="elfedit"></a><span class=
"term"><span class=
"command"><strong>elfedit</strong></span></span>
</p>
</td>
<td>
<p>
更新 ELF 文件的 ELF 文件头
</p>
</td>
</tr>
<tr>
<td>
<p>
<a id="gprof" name="gprof"></a><span class=
"term"><span class=
"command"><strong>gprof</strong></span></span>
</p>
</td>
<td>
<p>
显示调用关系图配置数据
</p>
</td>
</tr>
<tr>
<td>
<p>
<a id="ld" name="ld"></a><span class="term"><span class=
"command"><strong>ld</strong></span></span>
</p>
</td>
<td>
<p>
一个将多个目标文件和归档文件合并为单一文件,重定位数据以及绑定符号引用的链接器。
</p>
</td>
</tr>
<tr>
<td>
<p>
<a id="ld.bfd" name="ld.bfd"></a><span class=
"term"><span class=
"command"><strong>ld.bfd</strong></span></span>
</p>
</td>
<td>
<p>
<span class=
"command"><strong>ld</strong></span> 的硬链接。
</p>
</td>
</tr>
<tr>
<td>
<p>
<a id="nm" name="nm"></a><span class="term"><span class=
"command"><strong>nm</strong></span></span>
</p>
</td>
<td>
<p>
列出指定目标文件中出现的符号
</p>
</td>
</tr>
<tr>
<td>
<p>
<a id="objcopy" name="objcopy"></a><span class=
"term"><span class=
"command"><strong>objcopy</strong></span></span>
</p>
</td>
<td>
<p>
转换某种类型的目标文件到另一种类型
</p>
</td>
</tr>
<tr>
<td>
<p>
<a id="objdump" name="objdump"></a><span class=
"term"><span class=
"command"><strong>objdump</strong></span></span>
</p>
</td>
<td>
<p>
显示给定目标文件的信息,用选项控制要显示的特定信息;显示的信息使用编译工具的程序员非常有用。
</p>
</td>
</tr>
<tr>
<td>
<p>
<a id="ranlib" name="ranlib"></a><span class=
"term"><span class=
"command"><strong>ranlib</strong></span></span>
</p>
</td>
<td>
<p>
生成归档文件内容的索引并保存到归档文件;索引列出了所有归档文件成员-可重定位的目标文件定义的符号。
</p>
</td>
</tr>
<tr>
<td>
<p>
<a id="readelf" name="readelf"></a><span class=
"term"><span class=
"command"><strong>readelf</strong></span></span>
</p>
</td>
<td>
<p>
显示 ELF 类型二进制文件的信息
</p>
</td>
</tr>
<tr>
<td>
<p>
<a id="size" name="size"></a><span class=
"term"><span class=
"command"><strong>size</strong></span></span>
</p>
</td>
<td>
<p>
列出所给目标文件各部分大小和总的大小
</p>
</td>
</tr>
<tr>
<td>
<p>
<a id="strings" name="strings"></a><span class=
"term"><span class=
"command"><strong>strings</strong></span></span>
</p>
</td>
<td>
<p>
对每个给定文件,输出不低于指定长度(默认是4)的可打印字符序列;对于目标文件,它默认只打印初始化和引导部分的字符串,而对于其它类型的文件扫描整个文件。
</p>
</td>
</tr>
<tr>
<td>
<p>
<a id="strip" name="strip"></a><span class=
"term"><span class=
"command"><strong>strip</strong></span></span>
</p>
</td>
<td>
<p>
忽略目标文件中的符号
</p>
</td>
</tr>
<tr>
<td>
<p>
<a id="libbfd" name="libbfd"></a><span class=
"term"><code class="filename">libbfd</code></span>
</p>
</td>
<td>
<p>
二进制文件描述库
</p>
</td>
</tr>
<tr>
<td>
<p>
<a id="libopcodes" name="libopcodes"></a><span class=
"term"><code class="filename">libopcodes</code></span>
</p>
</td>
<td>
<p>
用于处理操作码&mdash;处理器指令的<span class=
"quote">&ldquo;<span class="quote">可读文本</span>&rdquo;</span>版本
的库;用于构建类似<span class="command"><strong>objdump</strong></span>
的工具。
</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="navfooter">
<div class="book">
<div class="titlepage">
<div class="author">
<span class="firstname">翻译团队:<a href="http://lctt.github.io/" target="_blank">LCTT</a></span>
<span class="surname">译者/校对:<a href="http://github.com/ictlyh" target="_blank">ictlyh</a>,</span>
</div>
</div>
</div>
<ul>
<li class="prev">
<a accesskey="p" href="file.html" title="File-5.22">上一页</a>
<p>
File-5.22
</p>
</li>
<li class="next">
<a accesskey="n" href="gmp.html" title="GMP-6.0.0a">下一页</a>
<p>
GMP-6.0.0a
</p>
</li>
<li class="up">
<a accesskey="u" href="chapter06.html" title=
"第六章&nbsp;安装基本的系统软件">返回</a>
</li>
<li class="home">
<a accesskey="h" href="../index.html" title=
"Linux From Scratch - Version 7.7-systemd">主页</a>
</li>
</ul>
</div>
</body>
</html>