扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
6.1 一个关於使用非主要 C 函式库的警告
在你开始编译任何会在开机时用到的程式之前, 假如程式是动态连结,并且是在 non-root partition 被 mount 之前使用的话, 那所有连结用的函式库都必须在 root partition 上。 在前面的安装程序里,我们将 glibc 安装成主要的函式库, 而旧的函式库仍然保留在 /lib, /lib 会在 root partition 上, 也就是说,所有在开机时会用到的程式都能正常工作。 然而,若你的 /usr 是在不同的 partition 上, 且把 glibc 当成测试用的函式库,安装在 /usr/i486-linuxglibc2, 那除非 /usr 已经被 mount,否则所有你用 glibc 编译的程式都将不能使用。
6.2 用测试安装的 glibc 编译程式
要用测试安装的 glibc 编译程式, 你必须要将 include 路径重设成 glibc 的 include 路径。 指定 "-nostdinc" 会取消正常 include 路径, 而 "-I/usr/i486-linuxglibc2/include" 则会指到 glibc 的 include 目录, 你也必须要指定 gcc 标准 include 目录, 通常是 /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include。 (这里假设你安装测试的函式库在 i486-linuxglibc2, 而 gcc 的版本是 2.7.2.2)
要用测试安装的 glibc 来连结,你必须指明 gcc 设定, 这是由 "-b i486-linuxglibc2" 这选项来达成。
对大部份的程式, 你可以简单的将其加入 makefile 的 $CFLAGS 与 $LDFLAGS 选项中:
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 这个 script,在执行 configure 之前, 定义 shell 变数 $CFLAGS 与 $LDFLAGS (在 csh/tcsh 下用 env/setenv 在 sh/bash/其它之下用 set/export)。 这样产生的 makefile 应该会包含正确的 $CFLAGS 与 $LDFLAGS。 不过并非所有的 configure scrpt 都会去取得这些变数, 所以在执行完 configure 之後,你还是要检查一下 makefile, 假如需要的话,手动修改它。
假如你所要编译的程式只呼叫 gcc,(而不直接呼叫 cpp 或 binutils) 你可以使用以下的 script,省去每次指定所有选项的麻烦:
#!/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 "$@"
编译时你可以使用这个 script 而不是 gcc。
6.3 当 glibc 是主要函式库时用 libc 5 编译程式
当你已经将 glibc 安装成主要的函式库之後,又想用旧的函式库来编译程式的时候, 你必须将 include 路径重设成旧的路径。 指定 "-nostdinc" 将会使预设的路径无效, 而 "-I/usr/i486-linuxlibc5/include" 会将 include 的路径指到旧函式库的 include 路径, 你也必须要指定 "-I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include" 以含入 gcc 所需的 include 档。 注意要视你新的目录与 gcc 版本来调整这些路径。
要用旧的 libc 来做连结,你必须指定 gcc 所用的架构。 这是由 "-b i486-linuxlibc5" 这个选项所指定的。
对大部份的程式,你可以简单的将这些选项加入到 makefile 里的 $CFLAGS 与 $LDFLAGS 选项里:
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 这个 script, 在执行 configure 之前, 定义 shell 变数 $CFLAGS 与 $LDFLAGS (在 csh/tcsh 下用 env/setenv 在 sh/bash/或其它之下用 set/export)。 这样产生的 makefile 应该会包含正确的 $CFLAGS 与 $LDFLAGS。 不过并非所有的 configure scrpt 都会去取得这些变数, 所以在执行完 configure 之後,你还是要简检查一下 makefile, 假如需要的话,手动修改它。
假如你所要编译的程式只呼叫 gcc,(而不直接呼叫 cpp 或 binutils) 你可以使用以下的 script,省去每次指定所有选项的麻烦:
#!/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 "$@"
编译时你可以使用这个 script 而不是 gcc。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者