本节介绍如何将 glibc 2 作为测试库安装。您编译的任何内容都将链接到您现有的库,除非您提供一些额外的参数来链接到新的库。路径似乎被编译到相当多的文件中,因此您可能必须从源代码安装库。
在配备 64 MB 内存的 i586@133 上,编译包含附加组件的完整库大约需要 3 个小时。在负载较重的 i686@200 上,大约需要半小时。
您需要从归档文件中提取源代码,以便您可以编译它。最好的方法是
tar xzf glibc-2.0.6.tar.gz
cd glibc-2.0.6
tar xzf ../glibc-linuxthreads-2.0.6.tar.gz
tar xzf ../glibc-crypt-2.0.6.tar.gz
tar xzf ../glibc-localedata-2.0.6.tar.gz
这将在 glibc-2.0.6 目录中放入 linuxthreads、crypt 和 localedata 目录,以便 configure 可以找到这些附加组件。
在 glibc-2.0.6 目录中,创建一个名为 compile 的目录,然后 cd 进入该目录。所有工作都将在该目录中完成,这将简化清理。(开发人员一直不太关心使“make clean”变得完美。)
mkdir compile
cd compile
运行 ../configure
。要使用附加软件包,您需要使用 --enable-add-ons 指定它们,例如 --enable-add-ons=linuxthreads,crypt,localedata。您还需要选择一个要安装到的目标目录。 /usr/i486-linuxglibc2 是一个不错的选择。此配置的 configure 行将是
../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr/i486-linuxglibc2
要编译和验证,请运行
make
make check
如果“make check”成功,则以 root 用户身份安装库(仍在 compile/
目录中)
make install
ld.so
创建一个链接到 /lib/ld-linux.so.2
ln -s /usr/i486-linuxglibc2/lib/ld-linux.so.2 /lib/ld-linux.so.2
这是唯一一个一旦程序链接位置就固定的库,并且在 /lib
中使用链接将有助于在稳定版本发布时将 glibc 升级为您的主要 C 库。/etc/ld.so.conf
。您需要在文件末尾添加新库所在的 lib 目录的路径,这将是 <prefix>/lib
,例如上面选择的 /usr/i486-linuxglibc2/lib
。修改 /etc/ld.so.conf
后,运行
ldconfig -v
安装的最后一步是更新 /usr/lib/gcc-lib
,以便 gcc 知道如何使用新库。首先,您需要复制现有配置。要找出当前配置是哪个,请使用 gcc 的 -v 选项
% gcc -v
Reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
gcc version 2.7.2.2
在本例中,i486-unknown-linux 是系统,2.7.2.2 是版本。您需要将 /usr/lib/gcc-lib/<system>
复制到新的测试系统目录
cd /usr/lib/gcc-lib/
cp -r i486-unknown-linux i486-linuxglibc2
更改到您的新测试系统目录和版本目录
cd /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2
并编辑此目录中找到的文件 specs
。在此文件中,将 /lib/ld-linux.so.1
更改为 /lib/ld-linux.so.2
。您还需要删除文件中所有表达式 %{...:-lgmon}
,因为 glibc 不使用 gmon 库进行性能分析。示例 specs 文件可以在 示例 specs 文件 部分找到。
您需要在新的 include 目录中创建到其他 include 目录的链接
cd /usr/i486-linuxglibc2/include
ln -s /usr/src/linux/include/linux
ln -s /usr/src/linux/include/asm
ln -s /usr/X11R6/include/X11
您可能还有其他库,例如 ncurses,它们需要将其头文件放在此目录中。您应该从 /usr/include
复制或链接文件。(某些库可能需要使用 glibc2 重新编译才能使用它。在这些情况下,只需编译并将软件包安装到 /usr/i486-linuxglibc2
。)
要测试安装,请在文件 glibc.c 中创建以下程序
#include <stdio.h>
main()
{
printf("hello world!\n");
}
并使用选项 "-b <base install directory> -nostdinc -I<install directory>/include -I/usr/lib/gcc-lib/<new system dir>/<gcc version>/include" 进行编译
% gcc -b i486-linuxglibc2 -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include glibc.c -o glibc
使用 ldd 验证程序是否与 glibc2 链接,而不是您的旧 libc
% ldd glibc
libc.so.6 => /usr/i486-linuxglibc2/lib/libc-2.0.6.so (0x4000d000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
如果它编译成功,链接检查通过,并且运行时生成“hello world!”,则安装成功。