5.7. Glibc-2.28

Glibc 软件包包含主要的 C 语言库。它提供用于分配内存、检索目录、 打开和关闭文件、读写文件、字符串处理、模式匹配、 算术等用途的基本子程序。

估计编译时间: 4.7 SBU
需要硬盘空间: 882 MB

5.7.1. 安装 Glibc

Glibc 文档推荐在一个专用目录中构建 Glibc:

mkdir -v build
cd       build

然后准备编译 Glibc:

../configure                             \
      --prefix=/tools                    \
      --host=$LFS_TGT                    \
      --build=$(../scripts/config.guess) \
      --enable-kernel=3.2             \
      --with-headers=/tools/include      \
      libc_cv_forced_unwind=yes          \
      libc_cv_c_cleanup=yes

配置选项的含义:

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

在它们的共同作用下,Glibc 的构建系统将自身配置为使用 /tools 中的交叉链接器和交叉编译器,进行交叉编译。

--enable-kernel=3.2

该选项告诉 Glibc 编译出支持 3.2 版或者更新的 Linux 内核,这样就不会使用那些为更老内核准备的替代方案。

--with-headers=/tools/include

该选项告诉 Glibc 在刚刚安装到 tools 目录中的头文件基础上进行编译,这样它就知道内核拥有哪些特性, 并据此对自身进行优化。

libc_cv_forced_unwind=yes

第 5.4 节 “Binutils-2.31.1 - 第一遍” 中安装的链接器是交叉链接器,在 Glibc 安装前不能正常使用。 这导致对于强制栈展开特性的配置检查失败, 因为该检查需要正常工作的链接器。 libc_cv_forced_unwind=yes 变量被传递给 configure 脚本, 从而表明强制栈展开支持是可用的,不需要进行测试。

libc_cv_c_cleanup=yes

类似的,我们传递 libc_cv_c_cleanup=yes 给 configure 脚本,从而跳过相关测试, 并表明 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 软件包的一部分, 宿主发行版应该提供它。

[注意]

注意

有报告称该软件包在并行构建时可能失败,如果发生了这种情况, 加上 "-j1" 选项重新执行 make 命令。

编译该软件包:

make

安装该软件包:

make install
[小心]

小心

现在我们不可避免地要停下确认新工具链的各基本功能(编译和链接) 能如我们所预期的那样工作。执行以下命令进行完整性检查:

echo 'int main(){}' > dummy.c
$LFS_TGT-gcc dummy.c
readelf -l a.out | grep ': /tools'

如果所有东西正常工作,那么应该没有错误, 而且最后一行命令应该输出下列格式的内容:

[Requesting program interpreter: /tools/lib64/ld-linux-x86-64.so.2]

注意,对于 32 位机器,解释器的名字将会是 /tools/lib/ld-linux.so.2

如果输出不像上面描述的那样,或者根本没有输出,就说明出了问题。 检查并重新跟踪各个步骤,找到出问题的地方并修正它。 在继续构建之前,必须解决这个问题。

检验步骤顺利完成后,清理测试文件:

rm -v dummy.c a.out
[注意]

注意

第 5.9 节 “Binutils-2.31.1 - 第二遍” 中,构建 Binutils 能够对工具链是否正常构建进行额外检查。如果 Binutils 不能构建, 说明在之前安装 Binutils 、GCC 或者 Glibc 时出了问题。

该软件包的详细信息可以在 第 6.9.3 节 “Glibc 的内容” 中找到。