📄 binutils-pass1.html
字号:
<!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=gb2312" />
<title>
5.3. Binutils-2.15.94.0.2.2 - Pass 1
</title>
<link rel="stylesheet" href="../stylesheets/lfs.css" type="text/css" />
<meta name="generator" content="DocBook XSL Stylesheets V1.68.1" />
<link rel="stylesheet" href="../stylesheets/lfs-print.css" type="text/css" media="print" />
</head>
<body id="lfs" class="6.1">
<div class="navheader">
<div class="headertitles">
<h4>
Linux From Scratch - Version 6.1
</h4>
<h3>
Chapter 5. 构建临时编译环境
</h3>
</div>
<ul class="headerlinks">
<li class="prev">
<a accesskey="p" href="toolchaintechnotes.html" title="Toolchain Technical Notes">后退</a>
<p>
Toolchain Technical Notes
</p>
</li>
<li class="next">
<a accesskey="n" href="gcc-pass1.html" title="GCC-3.4.3 - Pass 1">前进</a>
<p>
GCC-3.4.3 - Pass 1
</p>
</li>
<li class="up">
<a accesskey="u" href="chapter05.html" title="Chapter 5. 构建临时编译环境">上一级</a>.
</li>
<li class="home">
<a accesskey="h" href="../index.html" title="Linux From Scratch - Version 6.1">回首页</a>
</li>
</ul>
</div>
<div class="wrap" lang="zh_cn" xml:lang="zh_cn">
<div class="titlepage">
<h1 class="sect1">
5.3. Binutils-2.15.94.0.2.2 - 第一遍
</h1>
</div>
<div class="package" lang="zh_cn" xml:lang="zh_cn">
<p>Binutils 是一组开发工具,包括连接器,汇编器和其他用于目标文件和档案的工具。
</p>
<div class="segmentedlist">
<div class="seglistitem">
<div class="seg">
<strong><span class="segtitle">预计编译时间:</span></strong> <span class="seg">1.0 SBU</span>
</div>
<div class="seg">
<strong><span class="segtitle">所需磁盘空间:</span></strong> <span class="seg">170 MB</span>
</div>
</div>
</div>
<div class="segmentedlist">
<div class="seglistitem">
<div class="seg">
<strong><span class="segtitle">安装依赖于:</span></strong> <span class="seg">Bash, Bison, Coreutils, Diffutils, Flex, GCC, Gettext, Glibc, Grep, M4, Make, Perl, Sed, Texinfo</span>
</div>
</div>
</div>
</div>
<div class="installation" lang="zh_cn" xml:lang="zh_cn">
<div class="titlepage">
<h2 class="sect2">
5.3.1. 安装 Binutils
</h2>
</div>
<p>第一个安装的软件包是 Binutils,这非常重要,因为 Glibc 和 GCC 会针对可用的连接器和汇编器进行多种测试,以决定打开某些特性。
</p>
<p>如果你把这个包缺省的优化参数(包括 <em class="parameter"><tt>-march</tt></em> 和 <em class="parameter"><tt>-mcpu</tt></em> 参数)改变的话,它会有些不正常的表现。因此,如果你定义了任何优化参数的话,比如 <tt class="envar">CFLAGS</tt> 和 <tt class="envar">CXXFLAGS</tt>,我们劝你在编译 Binutils 时 unset 或修改它们。
</p>
<p>Binutils 的文档推荐用一个新建的目录来编译它,而不是在源码目录中:
</p>
<pre class="userinput"><kbd class="command">mkdir ../binutils-build
cd ../binutils-build</kbd></pre>
<div class="note">
<div class="admonhead">
<img alt="[Note]" src="../images/note.png" />
<h3 class="admontitle">
注意
</h3>
</div>
<div class="admonbody">
<p>
如果你想利用本书余下部份列出的SBU值,那么现在就要测量一下编译本软件包的时间。你可以用类似于下面这样的<span><strong class="command">time</strong></span>命令:<strong class="userinput"><tt>time { ./configure ...
&& make && make install; }</tt></strong> </p>
</div>
</div>
<p>
现在为编译 Binutils 作准备:
</p>
<pre class="userinput"><kbd class="command">../binutils-2.15.94.0.2.2/configure --prefix=/tools --disable-nls</kbd></pre>
<p>
配置选项的意思是:
</p>
<div class="variablelist">
<dl>
<dt>
<span class="term"><em class="parameter"><tt>--prefix=/tools</tt></em></span>
</dt>
<dd>
<p>这个参数告诉 configure 脚本,应该把 Binutils 软件包中的程序安装到 <tt class="filename">/tools</tt> 目录中。
</p>
</dd>
<dt>
<span class="term"><em class="parameter"><tt>--disable-nls</tt></em></span>
</dt>
<dd>
<p>
这个参数禁止了国际化(通常简称i18n)。静态程序不需要国际化的特性,并且在静态连接时nls常常引起错误。
</p>
</dd>
</dl>
</div>
<p>
接下来编译它:
</p>
<pre class="userinput"><kbd class="command">make</kbd></pre>
<p>
现在编译完成了。通常我们会运行测试套件,但是目前测试套件(Tcl, Expect, DejaGNU)尚未安装。而且在这里运行测试也没什么好处,因为第一遍安装的程序很快就会被第二遍的程序所覆盖。
</p>
<p>
现在安装软件包:
</p>
<pre class="userinput"><kbd class="command">make install</kbd></pre>
<p>
现在,为后面“调整”glibc准备连接器:
</p>
<pre class="userinput"><kbd class="command">make -C ld clean
make -C ld LIB_PATH=/tools/lib</kbd></pre>
<p>
make 参数的意思是:
</p>
<div class="variablelist">
<dl>
<dt>
<span class="term"><em class="parameter"><tt>-C ld clean</tt></em></span>
</dt>
<dd>
<p>
告诉make,删除所有子目录 <tt class="filename">ld</tt> 中编译生成的文件。
</p>
</dd>
<dt>
<span class="term"><em class="parameter"><tt>-C ld LIB_PATH=/tools/lib</tt></em></span>
</dt>
<dd>
<p>
这个选项重新编译 <tt class="filename">ld</tt> 子目录中的所有文件。<tt class="envar">LIB_PATH</tt> 是 Makefile 的一个变量,在命令行里指定它,使我们可以覆盖默认值,并让它指向临时工具目录。这个变量的值指定了连接器的缺省库搜索路径。在这一章的稍后部分会用到。
</p>
</dd>
</dl>
</div>
<div class="warning">
<div class="admonhead">
<img alt="[Warning]" src="../images/warning.png" />
<h3 class="admontitle">
警告
</h3>
</div>
<div class="admonbody">
<p>
现在<span class="emphasis"><em>不能</em></span>删除Binutils的编译目录和源码目录,我们在本章后面部份还要用到它们,所以请别动它们。
</p>
</div>
</div>
</div>
<div class="content" lang="zh_cn" xml:lang="zh_cn">
<p>关于这个软件包的详细资料位于 <a href="../chapter06/binutils.html#contents-binutils" title="6.13.2. Contents of Binutils">Section 6.13.2, “Contents of Binutils.”</a>
</p>
</div>
</div>
<div class="navfooter">
<ul>
<li class="prev">
<a accesskey="p" href="toolchaintechnotes.html" title="Toolchain Technical Notes">后退</a>
<p>
Toolchain Technical Notes
</p>
</li>
<li class="next">
<a accesskey="n" href="gcc-pass1.html" title="GCC-3.4.3 - Pass 1">前进</a>
<p>
GCC-3.4.3 - Pass 1
</p>
</li>
<li class="up">
<a accesskey="u" href="chapter05.html" title="Chapter 5. 构建临时编译环境">上一级</a>.
</li>
<li class="home">
<a accesskey="h" href="../index.html" title="Linux From Scratch - Version 6.1">回首页</a>.
</li>
</ul>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -