有时您可能希望使用备用库来编译程序。本节将解释如何实现这一点,使用前两节示例中使用的目录和安装名称。请记住根据您的设置更改名称。
在编译任何用于系统启动过程的程序之前,请记住,如果程序是动态链接的,并且在非 root 分区挂载之前使用,则所有链接库都必须位于 root 分区上。按照上一节中将 glibc 安装为主要 C 库的安装过程,旧的 libc 保留在 /lib
中,它将位于您的 root 分区上。这意味着您的所有程序在启动期间仍然可以工作。但是,如果 /usr
位于不同的分区,并且您将 glibc 作为测试库安装在 /usr/i486-linuxglibc2
中,则您使用 glibc 编译的任何新程序都将无法工作,直到您的 /usr
分区被挂载。
要使用测试安装的 glibc 编译程序,您需要重置 include 路径以指向 glibc include。指定 "-nostdinc" 将否定正常路径,而 "-I/usr/i486-linuxglibc2/include" 将指向 glibc include。您还需要指定 gcc include,它们位于 /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include
中(假设您使用 gcc 版本 2.7.2.2 将测试库安装在 i486-linuxglibc2 中)。
要将程序与测试安装的 glibc 链接,您需要指定 gcc 设置。这可以通过使用选项 "-b i486-linuxglibc2" 来完成。
对于大多数程序,您可以通过将这些新选项添加到 $CFLAGS
和 $LDFLAGS
makefile 选项中来指定它们。
CFLAGS = -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include -b i486-linuxglibc2
LDFLAGS = -b i486-linuxglibc2
如果您正在使用 configure 脚本,请在运行 configure 之前定义 $CFLAGS
和 $LDFLAGS
shell 变量(对于 csh/tcsh,使用 env/setenv;对于 sh/bash/etc,使用 set/export)。由此生成的 makefile 应该包含正确的 $CFLAGS
和 $LDFLAGS
。并非所有 configure 脚本都会拾取这些变量,因此您应该在运行 configure 后检查并在必要时手动编辑 makefile。如果您编译的程序仅调用 gcc(而不是直接调用 cpp 或 binutils),则可以使用以下脚本来避免每次都指定所有选项。
#!/bin/bash
/usr/bin/gcc -b i486-linuxglibc2 -nostdinc \
-I/usr/i486-linuxglibc2/include \
-I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include "$@"
然后,您可以在编译时使用此脚本代替 "gcc"。
当您已将 glibc 安装为主要库时,要使用旧库编译程序,您需要将 include 路径重置为旧 include。指定 "-nostdinc" 将否定正常路径,而 "-I/usr/i486-linuxlibc5/include" 将指向 glibc include。您还必须指定 "-I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include" 以包含 gcc 特定的 include。请记住根据您为新目录命名的名称和您的 gcc 版本调整这些路径。
要将程序与旧的 libc 链接,您需要指定 gcc 设置。这可以通过使用选项 "-b i486-linuxlibc5" 来完成。
对于大多数程序,您可以通过将这些新选项附加到 $CFLAGS
和 $LDFLAGS
makefile 选项中来指定它们。
CFLAGS = -nostdinc -I/usr/i486-linuxlibc5/include -I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include -b i486-linuxlibc5
LDFLAGS = -b i486-linuxlibc5
如果您正在使用 configure 脚本,请在运行 configure 之前定义 $CFLAGS
和 $LDFLAGS
shell 变量(对于 csh/tcsh,使用 env/setenv;对于 sh/bash/etc,使用 set/export)。由此生成的 makefile 应该包含正确的 $CFLAGS
和 $LDFLAGS
。并非所有 configure 脚本都会拾取这些变量,因此您应该在运行 configure 后检查并在必要时手动编辑 makefile。如果您编译的程序仅调用 gcc(而不是直接调用 cpp 或 binutils),则可以使用以下脚本来避免每次都指定所有选项。
#!/bin/bash
/usr/bin/gcc -b i486-linuxlibc5 -nostdinc \
-I/usr/i486-linuxlibc5/include \
-I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include "$@"
然后,您可以在编译时使用此脚本代替 "gcc"。