5.6. Glibc-2.3.4

Glibc 软件包包含主要的 C 库。这个库为分配内存、搜索目录、打开和关闭文件、读取和写入文件、字符串处理、模式匹配、算术等等提供基本例程。

大致构建时间: 11.8 SBU
所需磁盘空间: 454 MB
安装依赖于: Bash、Binutils、Coreutils、Diffutils、Gawk、GCC、Gettext、Grep、Make、Perl、Sed 和 Texinfo

5.6.1. Glibc 的安装

已知此软件包在其默认优化标志(包括 -march-mcpu 选项)被更改时会出现问题。如果已定义任何覆盖默认优化的环境变量,例如CFLAGSCXXFLAGS,在构建 Glibc 时取消设置它们。

应该注意的是,以本书中建议的方法以外的任何方式编译 Glibc 都会使系统的稳定性面临风险。

当运行内核为 2.6.11 或更高版本时,Glibc 有两个测试会失败。问题已确定出在测试本身,而不是 C 库或内核。如果您计划运行测试套件,请应用此补丁

patch -Np1 -i ../glibc-2.3.4-fix_test-1.patch

Glibc 文档建议在源目录之外的专用构建目录中构建 Glibc

mkdir -v ../glibc-build
cd ../glibc-build

接下来,为编译准备 Glibc

../glibc-2.3.4/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

configure 选项的含义

--disable-profile

这将构建不带性能分析信息的库。如果临时工具需要性能分析,请省略此选项。

--enable-add-ons

这告诉 Glibc 使用 NPTL 插件作为其线程库。

--enable-kernel=2.6.0

这告诉 Glibc 编译库时支持 2.6.x Linux 内核。

--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 的支持,因此使用此类支持编译的 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

编译现已完成。如前所述,运行本章安装的临时工具的测试套件不是强制性的。要运行 Glibc 测试套件(如果需要),以下命令将执行此操作

make check

有关特别重要的测试失败的讨论,请参阅 第 6.11 节,“Glibc-2.3.4。”

在本章中,一些测试可能会受到主机系统上现有工具或环境问题的不利影响。本章中的 Glibc 测试套件失败通常不令人担忧。第 6 章 中安装的 Glibc 是最终将被使用的 Glibc,因此这是需要通过大多数测试的 Glibc(即使在 第 6 章 中,仍然可能发生一些失败,例如,数学测试)。

当遇到失败时,请记录下来,然后通过重新发出 make check 命令继续。测试套件应从中断处继续。可以通过发出 make -k check 命令来避免此停止-启动序列。如果使用此选项,请务必记录输出,以便以后可以检查日志文件中的失败。

Glibc 的安装阶段将在最后发出关于缺少/tools/etc/ld.so.conf的无害警告。 使用以下命令防止此警告

mkdir -v /tools/etc
touch /tools/etc/ld.so.conf

安装软件包

make install

不同的国家和文化对于如何交流有不同的约定。这些约定范围从表示日期和时间的格式到更复杂的问题,例如所说的语言。GNU 程序的“国际化”通过区域设置起作用。

[Note]

注意

如果在本章中未运行测试套件(按照建议),则现在无需安装区域设置。适当的区域设置将在下一章中安装。

要仍然安装 Glibc 区域设置,请使用以下命令

make localedata/install-locales

为了节省时间,运行上一个命令(它生成并安装 Glibc 知道的每个区域设置)的替代方法是仅安装需要和想要的那些区域设置。这可以通过使用 localedef 命令来实现。有关此命令的信息位于INSTALLGlibc 源代码中的文件中。但是,为了使未来软件包的测试能够通过,特别是 GCC 中的 libstdc++ 测试,有许多区域设置是必不可少的。以下说明,而不是上面使用的 install-locales 目标,将安装成功运行测试所需的最小区域设置集

mkdir -pv /tools/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

有关此软件包的详细信息,请参阅 第 6.11.4 节,“Glibc 的内容。”