文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>06.构建临时编译环境(三)

06.构建临时编译环境(三)

时间:2006-11-17  来源:anima

六、构建临时编译环境(三)


5.Linux-Libc-Headers-2.6.12.0

Linux-Libc-Headers 包含了"纯净的"内核头文件。

预计编译时间: 少于 0.1 SBU

所需磁盘空间: 27 MB


安装Linux-Libc-Headers

多年来的公共惯例是使用 /usr/include 目录下"原始的"内核头文件(直接来自于内核源码包),但是近年来,内核开发者强烈要求不要这样做,因此诞生了 Linux-Libc-Headers 项目,其目标是维护一个API(应用程序编程接口)版本稳定的 Linux 头文件。



安装这些头文件:

lfs:/mnt/lfs/sources/gcc-build$ tar -jxvf $LFS/sources/linux-libc-headers-2.6.12.0.tar.bz2 -C $LFS/sources

lfs:/mnt/lfs/sources/gcc-build$ cd $LFS/sources/linux-libc-headers-2.6.12.0

lfs:/mnt/lfs/sources/linux-libc-headers-2.6.12.0$ ls

doc include

lfs:/mnt/lfs/sources/linux-libc-headers-2.6.12.0$ ls include/

asm-alpha asm-frv asm-m32r asm-parisc asm-sh asm-um mtd

asm-arm asm-h8300 asm-m68k asm-ppc asm-sh64 asm-v850 scsi

asm-arm26 asm-i386 asm-m68knommu asm-ppc64 asm-sparc asm-x86_64 sound

asm-cris asm-ia64 asm-mips asm-s390 asm-sparc64 linux

lfs:/mnt/lfs/sources/linux-libc-headers-2.6.12.0$ cp -Rv include/asm-i386/ /tools/include/asm

lfs:/mnt/lfs/sources/linux-libc-headers-2.6.12.0$ cp -Rv include/linux/ /tools/include/


如果您的机器不是 i386 兼容架构的,请相应的调整第一条命令。






6.Glibc-2.3.6

Glibc 包含了主要的C库。这个库提供了基本例程,用于分配内存、搜索目录、打开关闭文件、读写文件、字串处理、模式匹配、数学计算等等。

预计编译时间: 6 SBU

所需磁盘空间: 325 MB


安装Glibc

Glibc 文档推荐在源码目录之外的一个专门的编译目录下进行编译:


lfs:/mnt/lfs/sources/linux-libc-headers-2.6.12.0$ tar -jxvf $LFS/sources/glibc-2.3.6.tar.bz2 -C $LFS/sources

lfs:/mnt/lfs/sources/linux-libc-headers-2.6.12.0$ cd $LFS/sources/glibc-2.3.6

lfs:/mnt/lfs/sources/glibc-2.3.6$ mkdir -v ../glibc-build

mkdir: created directory `../glibc-build'

lfs:/mnt/lfs/sources/glibc-2.3.6$ cd ../glibc-build


接下来为编译 Glibc 做准备:


lfs:/mnt/lfs/sources/glibc-build$ ../glibc-2.3.6/configure --prefix=/tools \

> --disable-profile --enable-add-ons \

> --enable-kernel=2.6.0 --with-binutils=/tools/bin \

> --without-gd --with-headers=/tools/include \

> --without-selinux



配置选项的含义:

--disable-profile 它关掉了 profiling 信息相关的库文件编译。如果你打算做 profiling ,就省掉这个参数。 --enable-add-ons 这个指示 Glibc 使用附加的 NPTL 包作为线程库。 --enable-kernel=2.6.0 这个告诉 Glibc 编译支持 2.6.x 内核的库。 --with-binutils=/tools/bin 这个参数并不是必需的。但它们能保证在编译 Glibc 时不会用错 Binutils 程序。 --without-gd 这个参数保证不生成 memusagestat 程序,这个程序会顽固地连接到宿主系统的库文件(libgd, libpng, libz 等等)。 --with-headers=/tools/include 这个参数指示 Glibc 按照前面刚刚安装到 tools 目录中的内核头文件编译自己,从而精确的知道内核的特性以根据这些特性对自己进行最佳化编译。 --without-selinux 当 从一个含有 SELinux 特性的宿主系统(如 Fedora Core 3)编译时,Glibc 将会将 SELinux 支持编译进来。由于 LFS 工具链并不包含 SELinux 支持,所以一个含有 SELinux 特性的 Glibc 将会导致许多操作失败。所以这里明确禁用它。

在这个阶段你可能会看到下面的警告:

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 应当提供的一部分。如果担心宿主系统的 msgfmt 有兼容性问题,你可以升级宿主系统的 Gettext ,也可以忽略这个问题而不去管它。





编译软件包:

lfs:/mnt/lfs/sources/glibc-build$ make && date +%c [开始于2006年11月13日00:51:08]

……

……

……

gcc -B/tools/bin/ -nostdlib -nostartfiles -o /mnt/lfs/sources/glibc-build/elf/lddlibc4 -Wl,-dynamic-linker=/tools/lib/ld-linux.so.2 -Wl,-z,combreloc -Wl,-z,relro /mnt/lfs/sources/glibc-build/csu/crt1.o /mnt/lfs/sources/glibc-build/csu/crti.o `gcc -B/tools/bin/ --print-file-name=crtbegin.o` /mnt/lfs/sources/glibc-build/elf/lddlibc4.o -Wl,-rpath-link=/mnt/lfs/sources/glibc-build:/mnt/lfs/sources/glibc-build/math:/mnt/lfs/sources/glibc-build/elf:/mnt/lfs/sources/glibc-build/dlfcn:/mnt/lfs/sources/glibc-build/nss:/mnt/lfs/sources/glibc-build/nis:/mnt/lfs/sources/glibc-build/rt:/mnt/lfs/sources/glibc-build/resolv:/mnt/lfs/sources/glibc-build/crypt:/mnt/lfs/sources/glibc-build/nptl /mnt/lfs/sources/glibc-build/libc.so.6 /mnt/lfs/sources/glibc-build/libc_nonshared.a -lgcc -Wl,--as-needed -lgcc_s -Wl,--no-as-needed `gcc -B/tools/bin/ --print-file-name=crtend.o` /mnt/lfs/sources/glibc-build/csu/crtn.o

make[2]: Leaving directory `/mnt/lfs/sources/glibc-2.3.6/elf'

make[1]: Leaving directory `/mnt/lfs/sources/glibc-2.3.6'

Mon Nov 13 01:24:57 2006

lfs:/mnt/lfs/sources/glibc-build$

[结束于2006年11月13日01:24:57]


现在编译完成了。正如前面说过的,在这里运行测试没什么用处,但是如果你坚持要测试的话可以运行下列命令:

make check

在这一章里,Glibc 的测试套件高度依赖于宿主系统的工具和环境,尤其是内核。因为这个原因,有时错误很难避免,但是无需太在意。安装系统基础软件里面的 Glibc 才是我们最后所使用的,那里的 Glibc 需要通过绝大多数测试。但要注意的是,即使在安装系统基础软件里,有的失败还是会出现,比如 math 测试。

当遇到一个错误时,记录下来,再用 make check 继续。测试套件会从出错的地方继续进行。你也可以用 make -k check 来一次把测试做完。但如果你这样做的话,就要把屏幕输出记录到文件里( make -k check > ck_log ),以便最后检查到底出了多少错,哪些测试出错了。


在安装 Glibc 的过程中,它会警告缺少 /tools/etc/ld.so.conf 文件。其实这没什么关系,不过下面的命令能修正它:

mkdir -v /tools/etc
touch /tools/etc/ld.so.conf

安装软件包:



lfs:/mnt/lfs/sources/glibc-build$ mkdir -v /tools/etc

mkdir: created directory `/tools/etc'

lfs:/mnt/lfs/sources/glibc-build$ touch /tools/etc/ld.so.conf

lfs:/mnt/lfs/sources/glibc-build$ make install



不同的国家和文化,使用不同的习俗来交流。这样的习俗很多,从比较简单的时间和日期格式,到非常复杂的语言发音。GNU 程序的"internationalization"(国际化,又称"i18n",18表示中间的18个字母)是以 locale 来实现的。


注意

如果刚才没有运行测试套件,那么现在就没有必要安装 locale 。










相关阅读 更多 +
排行榜 更多 +
激萌手账

激萌手账

游戏工具 下载
躺平不要慌

躺平不要慌

音乐节奏 下载
嗨自拍修图

嗨自拍修图

图像拍照 下载