5.7. Glibc-2.11.1

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

预计编译时间: 6.9 SBU
所需磁盘空间: 371 MB

5.7.1. 安装 Glibc

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

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

因为 Glibc 不在支持 i386, 所以,它的开发者建议在用户在x86机器上编译Glibc时,要使用 -march=i486 这个编译器标志。 有几种办法可以实现这一点, 但是, 测试显示, 最好是将标志放在内建变量 “CFLAGS” 里面。Glibc 的内建系统使用 CFLAGS 并不是不可改变的,也可以通过使用 专门的文件 configparms 来向CGAGS内容里附加新的标志。 当设置 -march 标志时,也有必要设置 -mtune=native 标志来为 -mtune 重置一个被更改的合理值。

case `uname -m` in
  i?86) echo "CFLAGS += -march=i486 -mtune=native" > configparms ;;
esac

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

../glibc-2.11.1/configure --prefix=/tools \
    --host=$LFS_TGT --build=$(../glibc-2.11.1/scripts/config.guess) \
    --disable-profile --enable-add-ons \
    --enable-kernel=2.6.18 --with-headers=/tools/include \
    libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes

配置选项的含义:

--host=$LFS_TGT, --build=$(../glibc-2.11.1/scripts/config.guess)

这些参数的综合结果是,Glibc 使用 /tools 目录下的交叉链接器和交叉编译器, 构建自己的系统配置,以便进行交叉编译。

--disable-profile

它关掉了分析(profiling)信息相关的库文件编译。如果你打算在这个临时工具中做分析, 就必需省掉这个参数。

--enable-add-ons

这个选项告诉 Glibc 使用附加的 NPTL 包作为它的线程库。

--enable-kernel=2.6.18

这个选项告诉 Glibc 编译支持2.6.18版 和更新版 Linux内核的库。 对于使用旧版内核的变通方法是不启用该参数。

--with-headers=/tools/include

这个参数指示 Glibc 按照前面刚刚安装到 tools 目录中的内核头文件编译自己, 从而准确的 知道内核的特性以根据这些特性对自己进行最佳化编译。

libc_cv_forced_unwind=yes

Section 5.4, “Binutils-2.20 - 第一遍” 交叉编译过程中安装的链接器,在安装完Glibc 以前都无法使用。也就是说这个配置的 forced unwind支持测试会失败, 因为它依赖运行中的链接器。 设置 libc_cv_forced_unwind=yes 这个选项是为了通知 configure 支持 force-unwind, 而不需要进行测试。

libc_cv_c_cleanup=yes

类似的, 我们在 configure 脚本中使用 libc_cv_c_cleanup=yes,以便配置成跳过测试而支持C语言清理处理。

在这个阶段你可能会看到下面的警告:

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 应当提供的一部分。

编译这个软件包:

make

这个软件包附带一个测试组件, 然而,现在还无法运行,因为我们还没有C++编译器。

[Note]

注意

为了成功运行,这个测试套件还需要安装 Locale 数据。 Locale 数据为系统提供相关信息, 如日期、时间和接受的货币格式, 以及系统工具的输出。 如果在本章不运行测试套件(按照建议), 现在就不必安装 locales。 在下章将安装适当的 locales。如果一定要安装Glibc locales,请参考 Section 6.9, “Glibc-2.11.1.”

安装这个软件包:

make install

这个软件包的详细内容位于 Section 6.9.4, “Glibc 的内容 ”