关于这个软件包的详细资料位于第 6.9.4 节 “Glibc 的内容”。
Glibc 包含了主要的 C 语言库。这个库提供了基本例程,用于分配内存、搜索目录、打开关闭文件、读写文件、字串处理、模式匹配、数学计算等等。
如果宿主系统使用 /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 的内容”。