📄 gcc-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.4. GCC-3.4.3 - 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="binutils-pass1.html" title="Binutils-2.15.94.0.2.2 - Pass 1">后退</a>
<p>
Binutils-2.15.94.0.2.2 - Pass 1
</p>
</li>
<li class="next">
<a accesskey="n" href="linux-libc-headers.html" title="Linux-Libc-Headers-2.6.11.2">前进</a>
<p>
Linux-Libc-Headers-2.6.11.2
</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.4. GCC-3.4.3 - 第一遍
</h1>
</div>
<div class="package" lang="zh_cn" xml:lang="zh_cn">
<p>GCC 软件包包含 GNU 编译器,其中有C和C++编译器。
</p>
<div class="segmentedlist">
<div class="seglistitem">
<div class="seg">
<strong><span class="segtitle">预计编译时间:</span></strong> <span class="seg">4.4 SBU</span>
</div>
<div class="seg">
<strong><span class="segtitle">所需磁盘空间:</span></strong> <span class="seg">219 MB</span>
</div>
</div>
</div>
<div class="segmentedlist">
<div class="seglistitem">
<div class="seg">
<strong><span class="segtitle">安装依赖于:</span></strong> <span class="seg">Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, Gettext, Glibc, Grep, 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.4.1. 安装 GCC
</h2>
</div>
<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>,我们劝你在编译 GCC 时 unset 或修改它们。</p>
<p>
GCC 的安装指南推荐用一个新建的目录来编译它,而不是在源码目录中:
</p>
<pre class="userinput"><kbd class="command">mkdir ../gcc-build
cd ../gcc-build</kbd></pre>
<p>
为编译 GCC 作准备:
</p>
<pre class="userinput"><kbd class="command">../gcc-3.4.3/configure --prefix=/tools \
--libexecdir=/tools/lib --with-local-prefix=/tools \
--disable-nls --enable-shared --enable-languages=c</kbd></pre>
<p>
这些配置参数的意思是:
</p>
<div class="variablelist">
<dl>
<dt>
<span class="term"><em class="parameter"><tt>--with-local-prefix=/tools</tt></em></span>
</dt>
<dd>
<p>
这个参数的目的是把 <tt class="filename">/usr/local/include</tt> 目录从 <span><strong class="command">gcc</strong></span> 的包含文件搜索路径里删除。这并不是绝对必要,但我们想尽量减小宿主系统的影响,所以才这样做。
</p>
</dd>
<dt>
<span class="term"><em class="parameter"><tt>--enable-shared</tt></em></span>
</dt>
<dd>
<p>
这个参数咋一看有点违反直觉。但只有加上它,才能编译出 <tt class="filename">libgcc_s.so.1</tt> 和 <tt class="filename">libgcc_eh.a</tt> 。Glibc(下一个软件包)的配置脚本只有在能找到 <tt class="filename">libgcc_eh.a</tt> 时才能确保产生正确的结果。
</p>
</dd>
<dt>
<span class="term"><em class="parameter"><tt>--enable-languages=c</tt></em></span>
</dt>
<dd>
<p>
只编译 GCC 软件包中的 C 编译器。我们在本章里不需要其它编译器。
</p>
</dd>
</dl>
</div>
<p>
接下来编译它:
</p>
<pre class="userinput"><kbd class="command">make bootstrap</kbd></pre>
<p>
编译参数的意思是:
</p>
<div class="variablelist">
<dl>
<dt>
<span class="term"><em class="parameter"><tt>bootstrap</tt></em></span>
</dt>
<dd>
<p>
使用这个参数的目的不仅仅是编译 GCC,而是重复编译它几次。它用第一次编译生成的程序来第二次编译自己,然后又用第二次编译生成的程序来第三次编译自己,最后比较第二次和第三次编译的结果,以确保编译器能毫无差错的编译自身,这通常表明编译是正确的。
</p>
</dd>
</dl>
</div>
<p>编译现在完成了,通常我们会在这里运行测试套件,但是正如前面说过的,测试套件目前尚未安装,而且在这里运行测试没什么好处,因为第一遍安装的程序很快就会被第二遍的程序所覆盖。
</p>
<p>
安装软件包:
</p>
<pre class="userinput"><kbd class="command">make install</kbd></pre>
<p>
最后,我们创建一个必要的符号连接。因为许多程序和脚本试图运行 <span><strong class="command">cc</strong></span> 而不是 <span><strong class="command">gcc</strong></span>,这样做是为了让程序能在多种 Unix 平台上运行,并保持一致性。并不是每个人都安装 GNU C 编译器。只运行 <span><strong class="command">cc</strong></span> 而不是 <span><strong class="command">gcc</strong></span> 可以把选择 C 编译器的自由留给了系统管理员,只要有这样一个符号链接指向它:
</p>
<pre class="userinput"><kbd class="command">ln -s gcc /tools/bin/cc</kbd></pre>
</div>
<div class="content" lang="zh_cn" xml:lang="zh_cn">
<p>关于这个软件包的详细资料位于 <a href="../chapter06/gcc.html#contents-gcc" title="6.14.2. Contents of GCC">Section 6.14.2, “Contents
of GCC.”</a>
</p>
</div>
</div>
<div class="navfooter">
<ul>
<li class="prev">
<a accesskey="p" href="binutils-pass1.html" title="Binutils-2.15.94.0.2.2 - Pass 1">后退</a>
<p>
Binutils-2.15.94.0.2.2 - Pass 1
</p>
</li>
<li class="next">
<a accesskey="n" href="linux-libc-headers.html" title="Linux-Libc-Headers-2.6.11.2">前进</a>
<p>
Linux-Libc-Headers-2.6.11.2
</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 + -