[跟我学嵌入式开发] 什么是交叉编译
2009-07-26 08:55
399 查看
在嵌入式系统开发中,经常用到与交叉编译(cross compiling)相关的术语,那交叉编译到底是指什么呢?
嵌入式系统往往资源都是很有限的,如果其资源和我们平常用的桌面计算机(在嵌入式系统开发中我们称之为主机,host machine)一样,那我想可能就不存在交叉编译这么一说了。最为典型的是,嵌入式系统的内存往往是几兆字节,且只有FLASH而没有硬盘这种大容量存储设备。也就是说在这种资源有限的环境中,我们不可能将我们的开发工具安装在嵌入式设备中(在嵌入式系统开发中我们称之为目标机,target machine),然后象我们平时做桌面开发那样,在上面进行编码、调试最后发布软件。
现实情况是,嵌入式系统的开发是在主机上进行的,那就存在一个问题:当我们的目标机处理器与主机的处理器不同时(比如目标机是ARM处理器,而主机是x86处理器),在这种请况下,如何保证在主机上编译的程序能在目标机上运行呢?答案在于编译器上!我们说嵌入式开发用的编译器与我们平时做桌面开发的编译器是不同的,在平时,我们的编译器是运行在什么处理器上,其编译出来的可执行程序也是运行在同样的处理器上的。实际上,我们可以让一个编译器运行在x86主机上,却编译出可以在ARM上运行的可执行程序,这种编译器就是交叉编译器(cross compiler),而采用交叉编译器进行编译就是指交叉编译(cross compiling),而交叉编译器相关的环境就是指交叉编译环境(cross compiling environment)。
为了让你对交叉编译环境有一个更好的认识,我举一个例子,这个例子就是VxWorks的Workbench(在早期版本中是Tornado)。这是一个VxWorks的开发环境,其除了采用Eclipse作为IDE外,后面采用的是GNU的GCC编译器进行程序编译。有人可能要问,GCC能运行在Windows上?其实,GCC不是直接运行在Windows上的,Workbench采用Cygwin作为其编译器的支撑环境,也就是说GCC及其binutils是运行在Cygwin上的。采用Workbench我们可以开发几乎所有主流处理器的嵌入式产品,而所有的工作都在Windows上完成的!
至此,相信你对交叉编译、交叉编译器和交叉编译环境有了很好的了解了。
如果你觉得本文的哪些地方需要改进或是存在一些不明白的地方,请留言。如果你想参与讨论嵌入式系统开发相关的话题,请加入技术圈(g.51cto.com/UltraEmbedded)。
嵌入式系统往往资源都是很有限的,如果其资源和我们平常用的桌面计算机(在嵌入式系统开发中我们称之为主机,host machine)一样,那我想可能就不存在交叉编译这么一说了。最为典型的是,嵌入式系统的内存往往是几兆字节,且只有FLASH而没有硬盘这种大容量存储设备。也就是说在这种资源有限的环境中,我们不可能将我们的开发工具安装在嵌入式设备中(在嵌入式系统开发中我们称之为目标机,target machine),然后象我们平时做桌面开发那样,在上面进行编码、调试最后发布软件。
现实情况是,嵌入式系统的开发是在主机上进行的,那就存在一个问题:当我们的目标机处理器与主机的处理器不同时(比如目标机是ARM处理器,而主机是x86处理器),在这种请况下,如何保证在主机上编译的程序能在目标机上运行呢?答案在于编译器上!我们说嵌入式开发用的编译器与我们平时做桌面开发的编译器是不同的,在平时,我们的编译器是运行在什么处理器上,其编译出来的可执行程序也是运行在同样的处理器上的。实际上,我们可以让一个编译器运行在x86主机上,却编译出可以在ARM上运行的可执行程序,这种编译器就是交叉编译器(cross compiler),而采用交叉编译器进行编译就是指交叉编译(cross compiling),而交叉编译器相关的环境就是指交叉编译环境(cross compiling environment)。
为了让你对交叉编译环境有一个更好的认识,我举一个例子,这个例子就是VxWorks的Workbench(在早期版本中是Tornado)。这是一个VxWorks的开发环境,其除了采用Eclipse作为IDE外,后面采用的是GNU的GCC编译器进行程序编译。有人可能要问,GCC能运行在Windows上?其实,GCC不是直接运行在Windows上的,Workbench采用Cygwin作为其编译器的支撑环境,也就是说GCC及其binutils是运行在Cygwin上的。采用Workbench我们可以开发几乎所有主流处理器的嵌入式产品,而所有的工作都在Windows上完成的!
至此,相信你对交叉编译、交叉编译器和交叉编译环境有了很好的了解了。
如果你觉得本文的哪些地方需要改进或是存在一些不明白的地方,请留言。如果你想参与讨论嵌入式系统开发相关的话题,请加入技术圈(g.51cto.com/UltraEmbedded)。
相关文章推荐
- 什么是嵌入式 如何理解嵌入式系统开发
- 嵌入式开发和交叉编译
- Ubuntu 搭建开发环境(QT+交叉编译)【嵌入式环境】
- 什么是ARM——龙人嵌入式开发和ARM开发板
- 【转】嵌入式时代已经来临,你还在等什么?---循序渐进学习嵌入式开发技术
- 【赛迪网】新手看招 嵌入式开发都需要学习什么
- 【转】嵌入式时代已经来临,你还在等什么?---循序渐进学习嵌入式开发技术
- 嵌入式开发都需要学习什么
- 嵌入式软件开发—— 应聘嵌入式软件工程师需要准备些什么?
- 什么是嵌入式开发?嵌入式是什么?处学者必看。
- 什么是嵌入式?嵌入式开发怎么学
- 嵌入式开发都需要学习什么
- 嵌入式开发做什么
- 基于Proteus的嵌入式系统虚拟化开发技术之一:Proteus是什么?
- 嵌入式开发之davinci---IPIPE、IPIPEIF and ISIF这三者有什么区别
- 什么是嵌入式开发 嵌入式开发有没有前途
- Ubuntu搭建嵌入式开发(交叉编译)环境-转
- 嵌入式开发需要什么技术
- 嵌入式开发之davinci--- DVRRDK, EZSDK和DVSDK这三者有什么区别
- 嵌入式开发调试,我到底学到了什么?