📄 glibc.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>
6.11. Glibc-2.3.4
</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 6. 安装系统基础软件
</h3>
</div>
<ul class="headerlinks">
<li class="prev">
<a accesskey="p" href="man-pages.html" title="Man-pages-2.01">后退</a>
<p>
Man-pages-2.01
</p>
</li>
<li class="next">
<a accesskey="n" href="readjusting.html" title="Re-adjusting the Toolchain">前进</a>
<p>
Re-adjusting the Toolchain
</p>
</li>
<li class="up">
<a accesskey="u" href="chapter06.html" title="Chapter 6. 安装系统基础软件">上一级</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">
6.11. Glibc-2.3.4
</h1>
</div>
<div class="package" lang="zh_cn" xml:lang="zh_cn">
<p>Glibc 包含了主要的C库。这个库提供了基本例程,用于分配内存、搜索目录、打开关闭文件、读写文件、字串处理、模式匹配、数学计算等等。</p>
<div class="segmentedlist">
<div class="seglistitem">
<div class="seg">
<strong><span class="segtitle">预计编译时间:</span></strong> <span class="seg">12.3 SBU</span>
</div>
<div class="seg">
<strong><span class="segtitle">所需磁盘空间:</span></strong> <span class="seg">476 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, Gawk, GCC, Gettext, 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">
6.11.1. 安装 Glibc
</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>,我们劝你在编译 Glibc 时 unset 或修改它们。</p>
<p>Glibc 的编译系统是高度自给自足的,即使我们的编译器 specs 文件和连接器还指向 <tt class="filename">/tools</tt> 目录,也能完美安装。我们在安装 Glibc 前不能调整 specs 文件和连接器,因为 Glibc 的 autoconf 测试会产生假结果,从而妨碍我们创建一个干净系统的目标。
</p>
<p>linuxthreads 源码包包含 Glibc 安装的线程库的手册页。在 Glibc 源码目录中解开 linuxthreads 的源码包:
</p>
<pre class="userinput"><kbd class="command">tar -xjvf /sources/glibc-linuxthreads-2.3.4.tar.bz2</kbd></pre>
<p>在2.6.11.x内核下,Glibc会有两个测试项目不能通过,这是既不是Glibc也不是内核的原因,而是测试工具自身的原因造成的。如果你使用的是2.6.11.x的内核,请先打上补丁:
</p>
<pre class="userinput"><kbd class="command">patch -Np1 -i ../glibc-2.3.4-fix_test-1.patch</kbd></pre>
<p>Glibc 文档推荐在源码目录之外的一个专门的编译目录下进行编译:
</p>
<pre class="userinput"><kbd class="command">mkdir ../glibc-build
cd ../glibc-build</kbd></pre>
<p>接下来为编译 Glibc 做准备: </p>
<pre class="userinput"><kbd class="command">../glibc-2.3.4/configure --prefix=/usr \
--disable-profile --enable-add-ons \
--enable-kernel=2.6.0 --libexecdir=/usr/lib/glibc</kbd></pre>
<p>新的配置选项的意思是:
</p>
<div class="variablelist">
<dl>
<dt>
<span class="term"><em class="parameter"><tt>--libexecdir=/usr/lib/glibc</tt></em></span>
</dt>
<dd>
<p>把 <span><strong class="command">pt_chown</strong></span> 程序的位置从默认的 <tt class="filename">/usr/libexec</tt> 改到 <tt class="filename">/usr/lib/glibc</tt>。
</p>
</dd>
</dl>
</div>
<p>编译软件包:</p>
<pre class="userinput"><kbd class="command">make</kbd></pre>
<div class="important">
<div class="admonhead">
<img alt="[Important]" src="../images/important.png" />
<h3 class="admontitle">
重要
</h3>
</div>
<div class="admonbody">
<p>本节的 Glibc 测试很重要。在任何情况下都不要省略这一步。
</p>
</div>
</div>
<p>
对结果进行测试:
</p>
<pre class="userinput"><kbd class="command">make check</kbd></pre>
<p>Glibc 的测试套件高度依赖于宿主系统的工具和环境,尤其是内核。通常,测试总是会通过。但在某些特定条件下,有些失败还是不可避免,比如math测试。下面是一些常见的错误:
</p>
<div class="itemizedlist">
<ul>
<li>
<p>
<span class="emphasis"><em>math</em></span> 测试在一些使用较老的Intel或AMD的系统上会失败,某些优化设置也会导致该测试失败。
</p>
</li>
<li>
<p>
<span class="emphasis"><em>gettext</em></span> 测试在某些宿主系统上会失败,原因尚不清楚。
</p>
</li>
<li>
<p><span class="emphasis"><em>atime</em></span> 测试会在使用 <em class="parameter"><tt>noatime</tt></em> 选项挂载 LFS 分区时失败(参见<a href="../chapter02/mounting.html" title="2.4. Mounting the New Partition">Section 2.4, “挂载新分区”</a>)。安装 LFS 时请勿使用 <em class="parameter"><tt>noatime</tt></em> 选项挂载 LFS 分区。
</p>
</li>
<li>
<p>在一些很老很慢的机器上,一些测试会由于超时而失败。
</p>
</li>
</ul>
</div>
<p>在安装 Glibc 的过程中,它会警告缺少 <tt class="filename">/etc/ld.so.conf</tt> 文件。其实这没什么关系,不过下面的命令能修正它:
</p>
<pre class="userinput"><kbd class="command">touch /etc/ld.so.conf</kbd></pre>
<p>
安装软件包:
</p>
<pre class="userinput"><kbd class="command">make install</kbd></pre>
<p>上面的命令没有安装 locale(用另一种语言反馈信息),所以用下面的命令来安装它们:
</p>
<pre class="userinput"><kbd class="command">make localedata/install-locales</kbd></pre>
<p>为了节省时间,上一个命令(生成并安装所有的 locale)的替代方案是只安装想要和需要的 locale 。使用 <span><strong class="command">localedef</strong></span> 命令可以做到这一点。这个命令的信息在 Glibc 的代码树里的 <tt class="filename">INSTALL</tt> 文件中有详细叙述。然而,为了将来的软件包测试的通过,许多 locale 还是需要的,比如 GCC 中的 <span class="emphasis"><em>libstdc++</em></span> ,下面的命令能安装运行测试套件所必需的最少 locale :
</p>
<pre class="userinput"><kbd class="command">mkdir -p /usr/lib/locale
localedef -i de_DE -f ISO-8859-1 de_DE
localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro
localedef -i en_HK -f ISO-8859-1 en_HK
localedef -i en_PH -f ISO-8859-1 en_PH
localedef -i en_US -f ISO-8859-1 en_US
localedef -i es_MX -f ISO-8859-1 es_MX
localedef -i fa_IR -f UTF-8 fa_IR
localedef -i fr_FR -f ISO-8859-1 fr_FR
localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i ja_JP -f EUC-JP ja_JP</kbd></pre>
<p>注意,由 <span><strong class="command">make localedata/install-locales</strong></span> 命令安装的 locale 中有许多并不被 LFS 和 BLFS 系统的应用程序支持。所以你不应当将 LFS 系统应用到需要处理多字节字符(包括UTF-8)或者从右向左书写的场合。有许多非官方的和不稳定的补丁可以修正这些问题,但是LFS的开发者们并不支持这些补丁。上述应用于 ja_JP 和 fa_IR 的 locale 也包含在不被支持的行列——安装它们仅仅是为了通过 GCC 和 Gettext 的测试而已。<span><strong class="command">watch</strong></span> 程序(Procps程序包的一部分)并不能正确的处理这些 locale。有关这些问题的深入讨论文档位于与国际化相关的 hint。
</p>
<p>创建 linuxthreads 手册,该手册是关于线程API的很棒的参考资料(也适用于NPTL):
</p>
<pre class="userinput"><kbd class="command">make -C ../glibc-2.3.4/linuxthreads/man</kbd></pre>
<p>
安装 linuxthreads 手册:
</p>
<pre class="userinput"><kbd class="command">make -C ../glibc-2.3.4/linuxthreads/man install</kbd></pre>
</div>
<div class="configuration" lang="zh_cn" xml:lang="zh_cn">
<div class="titlepage">
<a id="conf-glibc" name="conf-glibc"></a>
<h2 class="sect2">
6.11.2. 配置 Glibc
</h2>
</div>
<p>我们需要建立 <tt class="filename">/etc/nsswitch.conf</tt> 文件。因为在这个文件丢失或不正确的情况下,Glibc 会使用默认配置,而 Glibc 的默认配置无法很好地在网络环境下工作。并且我们也需要设置自己的时区。
</p>
<p>使用如下命令建立一个新的 <tt class="filename">/etc/nsswitch.conf</tt> 文件:
</p>
<pre class="userinput"><kbd class="command">cat > /etc/nsswitch.conf << "EOF"
<tt class="literal"># Begin /etc/nsswitch.conf
passwd: files
group: files
shadow: files
hosts: files dns
networks: files
protocols: files
services: files
ethers: files
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -