5.6. Glibc-2.3.6

最后更新于:2022-04-01 22:47:53

# 5.6\. Glibc-2.3.6 Glibc 包含了主要的C库。这个库提供了基本例程,用于分配内存、搜索目录、打开关闭文件、读写文件、字串处理、模式匹配、数学计算等等。 **预计编译时间:** 6 SBU**所需磁盘空间:** 325 MB ## 5.6.1\. 安装 Glibc Glibc 文档推荐在源码目录之外的一个专门的编译目录下进行编译: ``` mkdir -v ../glibc-build cd ../glibc-build ``` 接下来为编译 Glibc 做准备: ``` ../glibc-2.3.6/configure --prefix=/tools \ --disable-profile --enable-add-ons \ --enable-kernel=2.6.0 --with-binutils=/tools/bin \ --without-gd --with-headers=/tools/include \ --without-selinux ``` **配置选项的含义:** _`--disable-profile`_ 它关掉了 profiling 信息相关的库文件编译。如果你打算做 profiling ,就省掉这个参数。 _`--enable-add-ons`_ 这个指示 Glibc 使用附加的 NPTL 包作为线程库。 _`--enable-kernel=2.6.0`_ 这个告诉 Glibc 编译支持 2.6.x 内核的库。 _`--with-binutils=/tools/bin`_ 这个参数并不是必需的。但它们能保证在编译 Glibc 时不会用错 Binutils 程序。 _`--without-gd`_ 这个参数保证不生成 `memusagestat` 程序,这个程序会顽固地连接到宿主系统的库文件(libgd, libpng, libz 等等)。 _`--with-headers=/tools/include`_ 这个参数指示 Glibc 按照前面刚刚安装到 tools 目录中的内核头文件编译自己,从而精确的知道内核的特性以根据这些特性对自己进行最佳化编译。 _`--without-selinux`_ 当从一个含有 SELinux 特性的宿主系统(如 Fedora Core 3)编译时,Glibc 将会将 SELinux 支持编译进来。由于 LFS 工具链并不包含 SELinux 支持,所以一个含有 SELinux 特性的 Glibc 将会导致许多操作失败。所以这里明确禁用它。 在这个阶段你可能会看到下面的警告: > ``` > configure: WARNING: > *** These auxiliary programs are missing or > *** incompatible versions: msgfmt > *** some features will be disabled. > *** Check the INSTALL file for required versions. > ``` 抱怨说缺少或有不兼容的 `msgfmt` 程序,这没有什么大问题,不过有时候可能会在运行测试套件的时候出问题。`msgfmt` 程序是宿主系统 Gettext 应当提供的一部分。如果担心宿主系统的 `msgfmt` 有兼容性问题,你可以升级宿主系统的 Gettext ,也可以忽略这个问题而不去管它。 编译软件包: ``` make ``` 现在编译完成了。正如前面说过的,在这里运行测试没什么用处,但是如果你坚持要测试的话可以运行下列命令: ``` make check ``` 关于测试失败重要性的讨论请参考这里:[节 6.9, "Glibc-2.3.6."](../chapter06/glibc.html "6.9\. Glibc-2.3.6") 在这一章里,Glibc 的测试套件高度依赖于宿主系统的工具和环境,尤其是内核。因为这个原因,有时错误很难避免,但是无需太在意。[第六章](../chapter06/chapter06.html)里面的 Glibc 才是我们最后所使用的,那里的 Glibc 需要通过绝大多数测试。但要注意的是,即使在[第六章](../chapter06/chapter06.html)里,有的失败还是会出现,比如 math 测试。 当遇到一个错误时,记录下来,再用 `make check` 继续。测试套件会从出错的地方继续进行。你也可以用 `make -k check` 来一次把测试做完。但如果你这样做的话,就要把屏幕输出记录到文件里( `make -k check > ck_log` ),以便最后检查到底出了多少错,哪些测试出错了。 在安装 Glibc 的过程中,它会警告缺少 `/tools/etc/ld.so.conf` 文件。其实这没什么关系,不过下面的命令能修正它: ``` mkdir -v /tools/etc touch /tools/etc/ld.so.conf ``` 安装软件包: ``` make install ``` 不同的国家和文化,使用不同的习俗来交流。这样的习俗很多,从比较简单的时间和日期格式,到非常复杂的语言发音。GNU 程序的"internationalization"(国际化,又称"i18n",18表示中间的18个字母)是以 locale 来实现的。 ### 注意 如果刚才没有运行测试套件,那么现在就没有必要安装 locale 。在下一章里面我们将会安装。如果你一定要安装 locale ,请参考[节 6.9, "Glibc-2.3.6."](../chapter06/glibc.html "6.9\. Glibc-2.3.6")的内容。 关于这个软件包的详细资料位于[节 6.9.4, Glibc 的内容](../chapter06/glibc.html#contents-glibc "6.9.4\. Glibc 的内容")
';