下一页 上一页 目录

4. 作为测试库安装。

本节介绍如何将 glibc 2 作为测试库安装。您编译的任何内容都将链接到您现有的库,除非您提供一些额外的参数来链接到新的库。路径似乎被编译到相当多的文件中,因此您可能必须从源代码安装库。

4.1 编译和安装。

先决条件。

在配备 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
 

4.2 更新动态加载器。

  1. 从新的 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 库。
  2. 编辑 /etc/ld.so.conf。您需要在文件末尾添加新库所在的 lib 目录的路径,这将是 <prefix>/lib,例如上面选择的 /usr/i486-linuxglibc2/lib。修改 /etc/ld.so.conf 后,运行
     ldconfig -v
     
    

4.3 为 gcc 配置。

安装的最后一步是更新 /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 文件 部分找到。

4.4 更新头文件链接。

您需要在新的 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。)

4.5 测试您的安装。

要测试安装,请在文件 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!”,则安装成功。


下一页 上一页 目录