LinuxSir.cn,穿越时空的Linuxsir!

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

[编译原理]什么是cross compiling?

[复制链接]
 楼主| 发表于 2005-8-30 03:23:34 | 显示全部楼层
Post by zhy2111314
交叉编译在实际中用到的名词一般是
宿主机---就是我们的pc机了,协助开发用的工具
目标板---一般是我们要开发的开发板,比如我现在用的Intel Xscal PXA255开发板,其cpu是intel xscal,主频400Mhz,板上带有64MSDRAM和32M Nand Flash(这里的cpu相当于我们pc的CPU,SDRAM相当于pc的内存,NAND flash充当pc的硬盘,因为嵌入式条件限制,比如cpu,内存,flash都不会太大,所以只能通过交叉编译生成目标板上可以使用的bootloader,kernel,filesystem,应用程序,如果我们的嵌入式硬件发展到了跟现在的pc一样了,恐怕也用不到交叉编译了)
交叉编译工具---比如arm-linux-gcc, arm-linux-g++, 等,跟pc上的编译工具一一对应,只是前面加了目标板的符号。

所以我感觉,做嵌入式就类似于在我们的pc上安装系统,运行应用程序,只不过这些工作都必须在我们pc环境下完成,然后通过串口或者网线传到目标板上来应用,典型例子就是PDA等手持设备,当然最近除了linux外,微软也在努力开发嵌入式应用,他们的产品WindowsCE从4.0以后应用很广,而且稳定性也得到了大家的认可,目前也是嵌入式中应用较多的操作系统,其原因我感觉是目前毕竟使用Windows下编程的人也不少,而WindowsCE正好迎合这批人,因为其开发环境用的大部分是VC语言,懂VC的很快会入门,所以目前应用较广。


也就是说在已有的PC平台上利用特定目标硬件平台的编译工具编译软件,然后在将这些编译好的软件传到目标机器上运行。也就是说只要我们拿针对目标体系结构的编译器来编译软件,就可以得到对应于那个平台的二进制文件。那么理论上说我可以在PC上为MAC编译软件,同时在MAC上我也可以为PC编译软件了。是这样吧。
回复 支持 反对

使用道具 举报

发表于 2005-8-31 21:25:23 | 显示全部楼层
我在 Debian 下利用 mingw32 编译同样硬件体系下 Windows 下的可执行程序

也是交叉编译吧
回复 支持 反对

使用道具 举报

发表于 2005-9-3 21:21:13 | 显示全部楼层
应该是的
我想
在cygwin下编译linux程序
反过来在linux下编译win程序
都应该是
什么软件还要编译成win下的exe呢?
哈哈
回复 支持 反对

使用道具 举报

发表于 2005-9-4 17:52:19 | 显示全部楼层
Post by linuxcpp
应该是的
我想
在cygwin下编译linux程序
反过来在linux下编译win程序
都应该是
什么软件还要编译成win下的exe呢?
哈哈

这个不太算吧,交叉编译与硬件平台有关,好像不是软件平台……
回复 支持 反对

使用道具 举报

发表于 2005-9-4 17:54:06 | 显示全部楼层
看这里上面的:
什么是交叉编译呢,简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓
平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)
回复 支持 反对

使用道具 举报

发表于 2005-9-4 22:50:03 | 显示全部楼层
不同的 OS 也是不同的平台啊...


Windows 下有用的东西太少了 , 所以编译一些过去..
回复 支持 反对

使用道具 举报

发表于 2005-9-6 14:32:09 | 显示全部楼层
主要抓住一点:
cross compile编译出来的东西,不是为了让它在编译它的环境中运行
所以主要还是硬件平台的差别,也有可能是同硬件不同操作系统,比如Linux,FreeBSD, x86-Solaris

但是
在windows里用cygwin里的gcc编译Linux程序并在windows里运行,这绝对不属于cross compiling

去wikipedia搜搜吧
回复 支持 反对

使用道具 举报

发表于 2005-9-9 17:03:44 | 显示全部楼层
哈哈
这个有意思
跳了两跳才编译出一个能在windows下运行的linux/unix程序
应该不叫cross compile ?
回复 支持 反对

使用道具 举报

发表于 2005-9-9 19:43:13 | 显示全部楼层
一跳都没有
你把那句话去掉一些定语和状语,就是
“在windows里编译程序在windows里运行“
何谈cross?

cross是在一个环境里编译,另外一个环境运行

Compiling a program takes place by running the compiler on the build platform. The compiled program will run on the target platform. Usually these two are the same; if they are different, the process is called cross-compilation.
回复 支持 反对

使用道具 举报

发表于 2005-9-9 20:05:51 | 显示全部楼层
Post by linuxcpp
应该是的
我想
在cygwin下编译linux程序
反过来在linux下编译win程序
都应该是
什么软件还要编译成win下的exe呢?
哈哈

在Linux编译windows程序,只有编译成PE格式的exe,才能称这个过程是cross compile

如果编译成了ELF,那就不叫cross compile了
回复 支持 反对

使用道具 举报

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

本版积分规则

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