交叉编译器
编辑交叉编译器是编译器能够生成的可执行用于代码平台比在其上运行编译器的一个其它。例如,在PC上运行但生成在Android智能手机上运行的代码的编译器就是交叉编译器。
从一个开发主机为多个平台编译代码需要交叉编译器。在目标平台上直接编译可能是不可行的,例如在计算资源有限的嵌入式系统上。
交叉编译器不同于源代码到源代码的编译器。交叉编译器用于跨平台软件生成机器代码,而源代码到源代码编译器将文本代码中的一种编程语言转换为另一种编程语言。两者都是编程工具。
交叉编译器的使用
编辑交叉编译器的基本用途是将构建环境与目标环境分开。这在几种情况下很有用:
- 设备资源极其有限的嵌入式计算机。例如,微波炉将有一个非常小的计算机来读取它的键盘和门传感器,向数字显示器和扬声器提供输出,并控制烹饪食物的机器。这台计算机通常不够强大,无法运行编译器、文件系统或开发环境。
- 多台机器编译。例如,公司可能希望支持多个不同版本的操作系统或支持多个不同的操作系统。通过使用交叉编译器,可以设置单个构建环境来为这些目标中的每一个进行编译。
- 在服务器场上编译。与为多台机器编译类似,一个涉及许多编译操作的复杂构建可以在任何免费机器上执行,无论其底层硬件或运行的操作系统版本如何。
- 引导到新平台。在为新平台或未来平台的模拟器开发软件时,人们使用交叉编译器来编译必要的工具,例如操作系统和本地编译器。
- 由使用在当前平台上运行的交叉编译器(例如在WindowsXP下运行的AztecC的MS-DOS6502交叉编译器)的爱好者为现在已经过时的旧平台(例如Commodore64或AppleII)编译模拟器的本机代码。
使用虚拟机(例如Java的JVM)解决了开发交叉编译器的一些原因。虚拟机范例允许跨多个目标系统使用相同的编译器输出,尽管这并不总是理想的,因为虚拟机通常较慢,并且编译的程序只能在具有该虚拟机的计算机上运行。
通常硬件架构不同(例如,在x86计算机上编译面向MIPS架构的程序),但只有操作系统环境不同时,交叉编译也适用,例如在Linux下编译FreeBSD程序,甚至只是系统库,就像在glibc主机上用uClibc编译程序一样。
ManxAztecC交叉编译器
编辑马恩岛的软件系统中,什鲁斯伯里,新泽西州,生产C编译器在20世纪80年xxx始面向专业开发人员为各种平台直至并包括个人电脑和Mac电脑。
Manx的AztecC编程语言可用于各种平台,包括MS-DOS、AppleII、DOS3.3和ProDOS、Commodore64、Macintosh68XXX和Amiga。
从1980年代一直持续到1990年代,直到ManxSoftwareSystems消失,AztecC的MS-DOS版本既作为本机模式编译器提供,也作为具有不同处理器的其他平台(包括Commodore64)的交叉编译器提供]和AppleII。AztecC的Internet发行版仍然存在,包括基于MS-DOS的交叉编译器。它们今天仍在使用。
Manx的AztecC86,他们的本机模式8086MS-DOS编译器,也是一个交叉编译器。尽管它没有为Commodore64和AppleII的AztecC656502交叉编译器等不同的处理器编译代码,但它为当时的16位8086系列处理器的遗留操作系统创建了二进制可执行文件。
当IBMPC首次推出时,它有多种操作系统可供选择,CP/M-86和PCDOS就是其中的两个。AztecC86提供了用于为IBMPC操作系统生成代码的链接库。整个1980年代后期的AztecC86版本(3.xx、4.xx和5.xx)增加了对MS-DOS“暂时性”版本1和2的支持,并且不如“基线”MS-DOS强大AztecC86在其消亡之前的第3版及更高版本。
最后,AztecC86为C语言开发人员提供了生成可ROM的“HEX”代码的能力,然后可以使用ROM刻录机将这些代码直接传输到基于8086的处理器。半虚拟化在今天可能更为普遍,但在那些年代,设备驱动程序的开发通常由应用程序程序员为单个应用程序完成,而新设备则相当于一个家庭手工业。应用程序员在没有制造商支持的情况下直接与硬件接口的情况并不少见。这种做法类似于今天的嵌入式系统开发。
ThomasFenwick和JamesGoodnowII是Aztec-C的两个主要开发者。Fenwick后来成为著名的MicrosoftWindowsCE内核或当时称为NK(“新内核”)的作者。
MicrosoftC交叉编译器
编辑早期历史–1980年代
MicrosoftC(MSC)的历史比其他更短,可追溯到1980年代。xxx个微软C编译器是由制造LatticeC的同一家公司制造的,并被微软重新命名为他们自己的公司,直到MSC4发布,这是微软自己生产的xxx个版本。
1987年,许多开发人员开始转向MicrosoftC,并且随着MicrosoftWindows的发展直至目前的状态,还有更多开发人员。像Clipper和后来的Clarion这样的产品出现了,它们通过使用跨语言技术提供了简单的数据库应用程序开发,允许使用MicrosoftC编译他们的部分程序。
BorlandC(加利福尼亚公司)在Microsoft发布其xxx个C产品之前数年就可以购买。
早在Borland之前,BSDUnix(伯克利大学)就从C语言的作者那里获得了C:Kernighan和Ritchie,他们在为AT&T工作时共同编写了它(实验室)。K&R的原始需求不仅是优雅的第二级解析语法来替换asmxxx级解析语法:它的设计目的是为了支持每个平台编写最少量的asm(C的原始设计是能够使用C与每个平台的最少支持代码,这是他们需要的。)。昨天的C也直接与ASM代码相关,无论在何处不依赖于平台。今天的C(更接近C++)不再是C兼容的,底层的asm代码可能与在给定平台上编写的代码截然不同(在Linux中:它有时会用分销商的选择替换和绕开库调用)。今天的C是一种3级或4级语言,它像二级语言一样使用旧方式。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/129157/