什么是交叉编译

上传人:子 文档编号:44172778 上传时间:2018-06-08 格式:DOC 页数:2 大小:24KB
返回 下载 相关 举报
什么是交叉编译_第1页
第1页 / 共2页
什么是交叉编译_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《什么是交叉编译》由会员分享,可在线阅读,更多相关《什么是交叉编译(2页珍藏版)》请在金锄头文库上搜索。

1、交叉编译 交叉编译呢,简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注 意的是所谓 平台,实际上包含两个概念:体系结构(Architecture) 、操作系统(Operating System) 。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同 的体系结构上运行。举例来说,我们常说的 x86 Linux 平台实际上是 Intel x86 体系结构和 Linux for x86 操作系统的统称;而 x86 WinNT 平台实际上是 Intel x86 体系结构和 Windows NT for x86 操作系统的简称。 一个经常会被问到的问题就是, “既然

2、我们已经有了主机编译器,那为什么还要交叉编译呢? ”其实答案很简单,没办法啊!有时是因为目的平台上不允许或不能够安装我们所需要的 编译器,而我们又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法 运行我们所需要编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈 不上运行什么编译器。另一个经常会被问到的问题就是:“既然可以交叉编译,那还要主机编译干吗?”其 实答案也很简单,交叉编译是不得已而为之!与主机编译相比,交叉编译受的限制更多, 虽然在理论上我们可以做任何形式的交叉编译,但事实上,由于受到专利、版权、技术的 限制,并不总是能够进行交叉编译,尤其是在业余条件下!举

3、例来说,我们至今无法生成 惠普公司专有的 som 格式的可执行文件,因此我们根本无法做目的平台为 HPPA-HPUX 的 交叉编译。就我们这个项目而言,需要交叉编译的原因有两个:首先,在项目的起始阶段,目的 平台尚未建立,因此需要做交叉编译,以生成我们所需要的 bootloader(启动引导代码) 以及操作系统核心;其次,当目的平台能启动之后,由于目的平台上资源的限制,当我们 编译大型程序时,依然可能需要用到交叉编译。交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算 机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如 C 代码)编译 (compile)

4、成计算机可以识别和执行的二进制代码。比如,我们在 Windows 平台上,可 使用 Visual C+开发环境,编写程序并编译成可执行程序。这种方式下,我们使用 PC 平 台上的 Windows 工具开发针对 Windows 本身的可执行程序,这种编译过程称为 native compilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目 标平台通常具有有限的存储空间和运算能力,比如常见的 ARM 平台,其一般的静态存储 空间大概是 16 到 32MB,而 CPU 的主频大概在 100MHz 到 500MHz 之间。这种情况下, 在 ARM 平台上进行本机编译就不太可

5、能了,这是因为一般的编译工具链(compilation tool chain)需要很大的存储空间,并需要很强的 CPU 运算能力。为了解决这个问题,交叉编 译工具就应运而生了。通过交叉编译工具,我们就可以在 CPU 能力很强、存储控件足够的 主机平台上(比如 PC 上)编译出针对其他平台的可执行程序。要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain) ,然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标 平台上运行的代码。常见的交叉编译例子如下:1、在 Windows PC 上,利用 ADS(ARM 开发环境) ,使

6、用 armcc 编译器,则可编译 出针对 ARM CPU 的可执行代码。2、在 Linux PC 上,利用 arm-linux-gcc 编译器,可编译出针对 Linux ARM 平台的可执 行代码。3、在 Windows PC 上,利用 cygwin 环境,运行 arm-elf-gcc 编译器,可编译出针对 ARM CPU 的可执行代码。做实际工作之前,我想我们应该先掌握一些关于交叉编译的基本知识,其实说白了也就是 理解一些我们经常会碰到的英文单词:宿主机(host) :编辑和编译程序的平台,一般是基于 X86 的 PC 机,通常也被称为 主机。目标机(target):用户开发的系统,通常都是

7、非 X86 平台。host 编译得到的可执行代 码在 targer 上运行。perfix 交叉编译器的安装位置。xxx-xxxx-xxxxx 平台描述。我们在主机平台上开发程序,并在这个平台上运行交叉编译器,编译我们的程序;而 由交叉编译器生成的程序将在目的平台上运行。这里值得说明得是平台描述,象 arm- linux、i386-pc-linux2.4.3 这样的字符串我们经常会看到,其实它是用来描述平台的,它有 完整格式、缩减格式和别名之分。完整格式是:CPU-制造厂商-操作系统,如 sparc-sun- sunos4.1.4,说明平台所使用的 CPU 是 sparc,制造厂商是 sun,上面运行的操作系统是 SunOS,版本是 4.1.4。当然,我们都不愿记这么长的东西,因此可以使用短格式,短格式 中有选择地去除了制造厂商、软件版本等信息,因此我们同样可以用 sparc-sunos 或 sparc- sunos-sunos4 来描述这个平台。如果觉得这个还是太麻烦,那就可以使用别名,sun4m 就 可以很简单地描述这个平台。需要注意的是,并不是所有的平台都有别名,也不是所有的 短格式都可以正确地描述平台。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号