⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 glibc.html

📁 Linux From Scratch的中文指导,学习LINUX很有用
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<!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.&nbsp;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&nbsp;6.&nbsp;安装系统基础软件
        </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&nbsp;6.&nbsp;安装系统基础软件">上一级</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.&nbsp;Mounting the New Partition">Section 2.4, &ldquo;挂载新分区&rdquo;</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 &gt; /etc/nsswitch.conf &lt;&lt; "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 + -