QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: haulm

开始认真地从LFS 6.4 一步一步地编译当中

[复制链接]
发表于 2009-1-29 17:38:00 | 显示全部楼层
rpm5?redhat 的rpm还是4.6吧。
注意,rpm.org的rpm和rh的rpm不一样的。

另:从lfs开始,如果想打出gcc-gnat/gcj,一开始就要考虑,不然等做出来基本系统再想编译就不可能了。rpm 4.6至少需要sqlite。我的做法是先lfs一个能启动的基本系统,不要chroot,而要真实环境,再在它上面编译rpm,这样会少很多问题。你的依赖那个问题是不是没有 init db。
回复

使用道具 举报

 楼主| 发表于 2009-1-29 23:24:08 | 显示全部楼层
原帖由 sejishikong 于 2009-1-29 17:38 发表
rpm5?redhat 的rpm还是4.6吧。
注意,rpm.org的rpm和rh的rpm不一样的。

另:从lfs开始,如果想打出gcc-gnat/gcj,一开始就要考虑,不然等做出来基本系统再想编译就不可能了。rpm 4.6至少需要sqlite。我的做法是先lfs一个能启 ...

rpm5没有rpmdb指令吧,原来我也以为是编译问题,后来发现可以安装,gnat/gcj没有编译,这些在LFS中没有提及。我还没有考虑去实现一个新的MGC,最主要是想要了解一个基本系统运行需要哪些组件,要进行哪些操作,我按LFS进行打包,是计划如果可行要用MI来安装。

某些观点有些不同:gcc-gnat/gcj 完全可以在打包完系统后重新打包gcc来完成,并不会存在说以后再编译就不可能。

chroot的作用就是让所有的编译完全和母系统隔绝,好比在第二次编译gcc后创建了一个安装在母系统中子系统之上的建筑棚,我们所要工作的就是在母系统这个桌面平台上利用建筑棚对子系统进行建设,如果不行进chroot,编译过程中母系统的所有工具和类库会参与和干扰子系统编译,你建立的LFS工具链根本没有任何意义和作用了,打造一个新的系统并非是GCC本身的替换,而是整个系统所有组件的替换,所以之前的基于升级编译系统的作法弊端是非常大的,这样做会使得子系统无法脱离母系统而存在,各种组件因为升级和复杂地结合使得系统更加混乱。通过chroot后进行一次全系统的编译,才会搞清楚哪些组件自己是不需要的,而哪些是必需的,这也就是LFS的意义,每个人在学会LFS后都会有自己的编译思路。

[ 本帖最后由 haulm 于 2009-1-29 23:49 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2009-1-29 23:55:27 | 显示全部楼层
我们知道,在编译当中有不少默认的编译参数,这些参数中有部份是附加自适应型的,只要系统当中有相关的类库,编译当中就会调用并编译其模块。如果不进行chroot,所有的编译将会是一场恶梦,编译当中子系统和母系统的类库混乱加以利用,系统组件将不稳定也不会快速,出现BUG也将无从追查,MGC2.1发生过太多莫名其妙的BUG了,难以忍受。最直接的例子就是glibc和tzdata之间的关系,它影响了时间的正确显示。
回复

使用道具 举报

发表于 2009-1-30 00:00:18 | 显示全部楼层
gcj在lfs后,可以通过某些手段打出来,gnat如果你lfs的时候没有做,完全依赖lfs自身是打不出来的。因为gnat依赖gnat。
回复

使用道具 举报

发表于 2009-1-30 17:13:51 | 显示全部楼层
印象里 gcc 里面 ada 和 java 的编译器也需要自身的编译器。
回复

使用道具 举报

发表于 2009-1-30 23:37:29 | 显示全部楼层
原帖由 jiangtao9999 于 2009-1-30 17:13 发表
印象里 gcc 里面 ada 和 java 的编译器也需要自身的编译器。

gcj仿佛可以通过3次编译不依赖于gcj编译出来。但是需要更多的依赖。
gnat(也即ada)必须得有gnat才行。
回复

使用道具 举报

 楼主| 发表于 2009-1-31 03:33:43 | 显示全部楼层
checking lzma.h usability... no
checking lzma.h presence... no
checking for lzma.h... no
checking for lzma_init in -llzma... no
checking whether to build with LZMA Utils library... no
MGC2.5似乎也没有正确编译出LZMA支持,只有一个/usr/bin/lzma是不够的。而这个工具的源码实在是混乱,MGC的源码我都难以想象是怎么做出来的,连编译路径都不对也能打成SRPM包,。我花几个小时都没有搞清楚,不过有一点看似有点明白了,lzmauitls library 先满足它,这个东西不是SDK,而lzma.h是否是那个大写的LZMA.h就不清楚了,很可能会是lzmauitls中的成员,因为FC9编译出来的lzma中就没有这个东西。

唉,经过几个小时时间的浪费终于搞明白,我们编译lzma及其支持,rpm管理器的lzma支持需要的是LZMA Utils library,同时LZMA Utils library编译了lzma,总之LZMA Utils library 是基于LZMA SDK开发的,现在好多的打包是直接基于SDK打包,打包方法各不相同,并且不能用于rpm管理器的lzma支持的编译。

[ 本帖最后由 haulm 于 2009-1-31 03:52 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2009-1-31 10:06:23 | 显示全部楼层
编译了LZMA Utils library,可是RPM5还是没认到LZMA Utils library,而且LZMA Utils library 所安装的头文件并不是RPM5的文件名。使用测试版本有了头文件,编译却是失败的。

[ 本帖最后由 haulm 于 2009-1-31 10:43 编辑 ]
回复

使用道具 举报

发表于 2009-1-31 10:09:12 | 显示全部楼层
期待MGC2.5出来,到时我来做测试(前提是我还在家
回复

使用道具 举报

 楼主| 发表于 2009-1-31 10:51:17 | 显示全部楼层
放弃LZMA Utils library 和 RPM5 的lzma压缩了,呵呵。。。
回复

使用道具 举报

 楼主| 发表于 2009-1-31 13:37:23 | 显示全部楼层
将rpm版本从5.1.6升级到5.2a2测试版本后可以认到lzma和编译了,看来是rpm这个组件本身的问题。
libtool: link: gcc -g -O2 -D_GNU_SOURCE -D_REENTRANT -o .libs/rpmgrep rpmgrep.o  ./.libs/librpmio.so -L/opt/rpm-5.2a2/db3 -L/opt/rpm-5.2a2/file/src -L/opt/rpm-5.2a2/file /opt/rpm-5.2a2/misc/.libs/librpmmisc.so ../misc/.libs/librpmmisc.so /tools/lib/libsqlite3.so /tools/lib/libbeecrypt.so -ldl /tools/lib/libstdc++.so -lm /tools/lib/liblzma.so -lz /tools/lib/libpopt.so -lpthread -lrt -Wl,-rpath -Wl,/tools/lib
./.libs/librpmio.so: undefined reference to `lzma_lzma_preset'
collect2: ld returned 1 exit status
make[4]: *** [rpmgrep] Error 1

[ 本帖最后由 haulm 于 2009-1-31 13:40 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2009-2-1 01:54:56 | 显示全部楼层
终于打进LZMA和SQLITE支持了,但目前还不懂怎么应用。。。

编译参数:./configure --prefix=/tools --with-lzma --with-sqlite --with-db --with-pcre=no

pcre显然是5.2后新增的正则表达式支持,还无法编译通过故no,5.1没有成功编译通过,rpm4依赖nss nspr所以根本不想尝试。

rpm-5.2.SNAPSHOT.20090130  sqlite-3.6.10  xz-4.999.7beta
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-27 02:52 , Processed in 0.126960 second(s), 12 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表