5.7. Glibc-2.8-20080929

Glibc 包含了主要的 C 语言库。这个库提供了基本例程,用于分配内存、搜索目录、打开关闭文件、读写文件、字串处理、模式匹配、数学计算等等。

预计编译时间: 7.6 SBU
所需磁盘空间: 407 MB

5.7.1. Glibc 的安装

如果宿主系统使用 /etc/ld.so.preload,运行下面命令修正可能会出现的问题。

sed -i 's@/etc/ld.so.preload@/tools/etc/ld.so.preload@' elf/rtld.c

Glibc 文档推荐在源码目录之外的一个专门的编译目录下进行编译:

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

由于 Glibc 不再支持 i386,Glibc 的开发者提示在为 X86 机器构建时使用编译选项 -march=i486,尽管其他方法也能做到,但是测试显示,最好的办法是将它传递给参数“CFLAGS”。为了不完全覆盖 Glibc 内部构建系统使用的 CFLAGS,使用特殊文件 configparms 将所需新选项附加到其原内容之后。由于设置了参数 -march,参数 -mtune 也会发生改变,使用 -mtune=native 将其设置为一个合理的值。

echo "CFLAGS += -march=i486 -mtune=native" > configparms

接下来,配置 Glibc 为编译做准备:

../glibc-2.8-20080929/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

该设置去掉了程序性能分析相关的库文件编译。如果需要在临时工具上做程序概要分析,就省掉这个参数。

--enable-add-ons

该选项告诉 Glibc 使用 NPTL(本地 POSIX 线程库)作为其线程库。

--enable-kernel=2.6.0

告诉 Glibc 在编译库文件时支持 Linux 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

该包提供了测试套件,但由于我们还没有 C++ 的编译器,现在还不能运行。

安装 Glibc 的过程会出现一个 /tools/etc/ld.so.conf 文件缺失的警告, 这没有什么危害,可以运行下面的命令消除掉:

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

安装:

make install

不同的国家和文化,使用不同的习俗来交流。这样的习俗很多,从比较简单的时间和日期格式,到非常复杂的语言发音。GNU 程序的“internationalization”(国际化,又称“i18n”,18表示中间的18个字母)是以 locale 来实现的。

[注意]

注意

如果没有运行测试套件(正如我们推荐的),现在就没有必要安装 locales。在下一章我们会安装合适的 locales,如果想要现在安装,请参考第 6.9 节 “Glibc-2.8-20080929”里的说明。

关于这个软件包的详细资料位于第 6.9.4 节 “Glibc 的内容”


Host by Alair