LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: good02xaut

另一中LFS的安装

[复制链接]
 楼主| 发表于 2006-2-19 10:25:51 | 显示全部楼层

2步解释:

Post by 终极幻想
1。在i386上编译 i386-ppc gcc4.0.2。(没问题)
2。在i386上编译 i386-ppc gcc4.0.2。 (这个是干嘛用的?直接用1里边编译出来的不可以?)
3。拷贝过去。(没问题。)
4。在ppc上编译 ppc-arm gcc4.0.2没问题。

这个东西要实践一下才好。可惜没机器。。。


2步是必不可少的。
从1出来的那个ppc-linux-gcc可以编译任何一个程序,使之运行在ppc的CPU。
ppc-linux-gcc -o hello hello.c
生成的hello程序,只能够运行在ppc机子上的。
可ppc-linux-gcc本身还是host386的程序,自己是个交叉编译器而已。拷贝到ppc上也运行不了的。

有了第2步就不一样了。简单一下:)
ppc-linux-gcc  -o gcc gcc.c
生成的这个gcc才可以在ppc上运行。这个ppc的target是ppc的。

如果在第2步
ppc-linux-gcc -o gcc gcc.c之前:
采用./configure -platform=arm配置
生成的gcc就是第4步的结果了。不过这样做有个坏处,就是没有得到ppc上的本地编译器。
这个过程好像和前面我说的有矛盾,不过这次的对!睡了一觉,就认识深刻了

编译gcc时用的GCC决定gcc的host,配置gcc的-platform=xxx决定生成gcc的target。

没有ppc可以从x86向x64架构上CCCLFS啊,64位CPU的机子还是比较容易找到的。
回复 支持 反对

使用道具 举报

发表于 2006-2-19 12:06:45 | 显示全部楼层
[color="Red"]
我们尽量规范一下表达,这样大家都容易理解对方在说什么:

Cross Compiler 就简称 CC 就好了,每次都打这么多,太累。

Canadian Cross Compiler 就简称 CCC ,打的时候别少了一个C。:)。

对于 CCC:
1。如果是运行在A机器上,为B机器编译的,其结果运行在C机器上的编译器,(build=A, host=B, target=C),
这样我们就说是 A.B-C 编译器。具体例子:i686.ppc-arm 编译器,运行在i686上,编译出的gcc是运行在ppc上,这个gcc是为arm编译程序的。

2。对于普通的 Cross 编译,那么就 A-B 编译 就可以了。
这个可以是 软件 的交叉编译,也可以是 CC 的编译,如 CLFS 用的就是这个。
回复 支持 反对

使用道具 举报

发表于 2006-2-19 12:27:03 | 显示全部楼层
刚刚的这个帖子,让我想到了一个问题。

[color="Red"]我们上边提到的 Canadian Cross 的方法是错误的(是我一开始的误导造成的,sorry),搜索了网上资料,确定了我这个想法。

拿 i686.ppc-arm 做例子,正确的应该是:
1。在 i686 上,编译一个 i686-ppc 的 toolchain。
2。在 i686 上,编译一个 i686-arm 的 toolchain。
3。在 i686 上,编译一个 ppc-arm 的 toolchain。
第三步出来的toolchain,就是要拷贝到ppc的toolchain。我这次说的绝对没错。(我就说昨天总觉得怪怪的,但是又找不到原因,就是我弄错了CC的原理!)

这3次编译都在 i686 上进行。不然 Canadian Cross 也就失去了意义了。具体的操作,我要继续深入研究。不过相信很快会得到答案。

谢谢你的参与。没有和你这翻讨论,我都不能彻底领悟到CC呢。:)。
回复 支持 反对

使用道具 举报

发表于 2006-2-19 12:38:43 | 显示全部楼层
要找个机会实践一下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-19 15:29:49 | 显示全部楼层

你这样描述还是不对,我给个图,应该能够彻底说清楚了

Post by 终极幻想
刚刚的这个帖子,让我想到了一个问题。

[color="Red"]我们上边提到的 Canadian Cross 的方法是错误的(是我一开始的误导造成的,sorry),搜索了网上资料,确定了我这个想法。

拿 i686.ppc-arm 做例子,正确的应该是:
1。在 i686 上,编译一个 i686-ppc 的 toolchain。
2。在 i686 上,编译一个 i686-arm 的 toolchain。([color="Red"]错误!:confused: )
3。在 i686 上,编译一个 ppc-arm 的 toolchain。
第三步出来的toolchain,就是要拷贝到ppc的toolchain。我这次说的绝对没错。(我就说昨天总觉得怪怪的,但是又找不到原因,就是我弄错了CC的原理!)

这3次编译都在 i686 上进行。不然 Canadian Cross 也就失去了意义了。具体的操作,我要继续深入研究。不过相信很快会得到答案。

谢谢你的参与。没有和你这翻讨论,我都不能彻底领悟到CC呢。:)。




附近是我用world画的流程, Canadian Cross 过程分2步编译完成。这两次编译都在host-386上进行。
如果还是有岐义,我就崩溃了。呵呵

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2006-2-19 15:40:28 | 显示全部楼层
我比较赞成good02xaut的观点:
1。在 i686 上,编译一个 i686-ppc 的 toolchain
2。然后利用这个i686-ppc编译出ppc-arm的toolchain。
觉得“在 i686 上,编译一个 i686-arm 的 toolchain”这步是多余的。
回复 支持 反对

使用道具 举报

发表于 2006-2-19 18:21:18 | 显示全部楼层
i686-ppc 不能直接编译出 ppc-arm 的 toolchain 。

你可以试试,因为这个并不需要 ppc/arm 这2台机器,这个就是 CC 的强大之处。[color="Red"]CC 只需要1台机器!
运行最后的那个toolchain才需要第二台机器。第三台机器用不到,除非你要测试第二台编译出来的内容。
CC 肯定需要 三步。而且都是在同一台机器完成的。

楼上的两位先崩溃一下,我想想怎么解释我说的第一句话。
回复 支持 反对

使用道具 举报

发表于 2006-2-19 19:05:18 | 显示全部楼层
在i686下编译一个在i686下运行并产生ppc下代码的GCC——i686-ppc
然后在i686下运行i686-ppc将产生运行于ppc下的GCC,但这个GCC用来编译出在arm下运行的代码,这个GCC不就是ppc-arm嘛。
挺符合逻辑的。
目前还没崩溃。
回复 支持 反对

使用道具 举报

发表于 2006-2-19 19:10:41 | 显示全部楼层
问题是:
然后在i686下运行i686-ppc将产生运行于ppc下的GCC,但这个GCC用来编译出在arm下运行的代码。

没有 i686.ppc-arm 的 toolchain,你的 i686.i686-ppc 是产生不了 ppc.ppc-arm  toolchain 的。帅哥可以试试,我这个是以前看到的信息,我正在实验中。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-19 19:15:25 | 显示全部楼层
CC 只需要1台机器!严重同意啊
版主没看附件吗?两次编译都是在同一台386上进行的啊

i686-ppc 不能直接编译出 ppc-arm 的 toolchain?这是什么意思?
我画的流程哪里有问题,你直接在里面改比较好理解。

toolchain一旦做好,就死了,对toolchain是不能二次编译的。只能对源码多次编译呀
你做那么多toolchain没有意义的啊

如果./configure --target=arm
      make (ppc-linux-gcc作为编译器)
这样做违背了交叉编译器的规则,那我就相信“i686-ppc 不能直接编译出 ppc-arm ”。
不过如果 交叉编译器 不能够编译  编译器  的话,Canadian Cross 就不会存在了。

所以,我觉得还是我说的对。呵呵
希望能够尽快得到版主的流程图描述,那样讨论更清楚些。
回复 支持 反对

使用道具 举报

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

本版积分规则

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