该软件包的详细信息请参见: 第 6.9.3 节 「Glibc 软件包内容」。
Glibc 软件包包含了主要的 C 函数库。这个库提供了分配内存、搜索目录、打开关闭文件、读写文件、操作字符串、模式匹配、基础算法等基本程序。
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
配置选项的含义:
--host=$LFS_TGT,
--build=$(../scripts/config.guess)
这些选项的组合效果是 Glibc 的构建系统配置它自己用 /tools
里面的交叉链接器和交叉编译器交叉编译自己。
--enable-kernel=3.2
这告诉 Glibc 编译能支持 3.2 以及之后的内核库。更早的内核版本不受支持。
--with-headers=/tools/include
告诉 Glibc 利用刚刚安装在 tools 文件夹中的头文件编译自身,此能够根据内核的具体特性提供更好的优化。
在这个过程中,可能会出现下面的警告:
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 软件包的一部分,主机发行版应该提供了。
有报告说用「parallel make」编译这个软件包的时候会失败。如果出现这种情况,用「-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
在后面的编译 Binutils 章节时会再一次检查工具链是否正确编译。如果 Binutils 编译失败,说明之前安装 Binutils、GCC、或者 Glibc 时某些地方出现了错误。
该软件包的详细信息请参见: 第 6.9.3 节 「Glibc 软件包内容」。