有关此软件包的详细信息,请参阅 第 6.11.4 节,“Glibc 的内容。”
Glibc 软件包包含主要的 C 库。这个库为分配内存、搜索目录、打开和关闭文件、读取和写入文件、字符串处理、模式匹配、算术等等提供基本例程。
已知此软件包在其默认优化标志(包括 -march 和 -mcpu 选项)被更改时会出现问题。如果已定义任何覆盖默认优化的环境变量,例如CFLAGS和CXXFLAGS,在构建 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 选项的含义
这将构建不带性能分析信息的库。如果临时工具需要性能分析,请省略此选项。
这告诉 Glibc 使用 NPTL 插件作为其线程库。
这告诉 Glibc 编译库时支持 2.6.x Linux 内核。
虽然不是必需的,但此开关可确保在 Glibc 构建期间不会出现与使用哪个 Binutils 程序相关的错误。
这可以防止构建 memusagestat 程序,该程序坚持链接到主机的库(libgd、libpng、libz 等)。
这告诉 Glibc 根据最近安装到 tools 目录的头文件编译自身,以便它确切地知道内核具有哪些功能,并可以相应地优化自身。
从包含 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 程序的“国际化”通过区域设置起作用。
如果在本章中未运行测试套件(按照建议),则现在无需安装区域设置。适当的区域设置将在下一章中安装。
要仍然安装 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 的内容。”