zoukankan      html  css  js  c++  java
  • [转]什么是交叉编译,为什么要使用交叉编译?

    一、什么是交叉编译

    在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。

    简单地说,就是在一个平台上生成另一个平台上的可执行代码。

    这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统(OperatingSystem)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。

    交叉编译这个概念的出现和流行是和嵌入式系统(Embedded Systems)的广泛发展同步的。

    我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如C代码)编译(compile)成计算机可以识别和执行的二进制代码。比如,我们在Windows平台上,可使用Visual C++开发环境,编写程序并编译成可执行程序。这种方式下,我们使用PC平台上的Windows工具开发针对Windows本身的可执行程序(在当前编译平台下,编译出来的程序只能放到当前平台下运行。),这种编译过程称为native compilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的ARM 平台,其一般的静态存储空间大概是16到32MB,而CPU的主频大概在100MHz到500MHz之间。这种情况下,在ARM平台上进行本机编译就不太可能了,这是因为一般的编译工具链(compilation tool chain)需要很大的存储空间,并需要很强的CPU运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在CPU能力很强、存储空间足够的主机平台上(比如PC上)编译出针对其他平台的可执行程序。

    要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(crosscompilation tool chain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。常见的交叉编译例子如下:

    ​ 1、在Windows PC上,利用ADS(ARM 开发环境),使用armcc编译器,则可编译出针对ARM CPU的可执行代码。

    ​ 2、在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。

    ​ 3、在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARM CPU的可执行代码。

    二、为什么要使用交叉编译

    有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;

    有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;

    有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。

    三、本地编译和交叉编译的比较

    本地编译:本地编译可以理解为,在当前编译平台下,编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发,都是属于本地编译。比如,我们在 x86 平台上,编写程序并编译成可执行程序。这种方式下,我们使用 x86 平台上的工具,开发针对 x86 平台本身的可执行程序,这个编译过程称为本地编译。

    交叉编译:交叉编译可以理解为,在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种目标平台(该平台自己不能干,所以让其它平台来干)上,但是编译平台本身却不能运行该程序。比如,我们在 x86 平台上,编写程序并编译成能运行在 ARM 平台的程序,编译得到的程序在 x86 平台上是不能运行的,必须放到 ARM 平台上才能运行。

  • 相关阅读:
    开机画面自己定制方法
    【转】ipc$入侵详解之终极解惑篇
    【转】动态嵌入式dll木马清除方法
    ZT:让手机使用更顺畅 PPC系统注册表修改大全(4)
    Ubuntu下用Opera不能用中文输入的解决
    Ubuntu 8 下使用vmware server 1.0.8的几个要领
    MSSQL数据库自动同步
    在Ubuntu上安装PCMCIA接口CDMA上网卡的调试笔记(ZT)
    %0 的作用
    oracle自动imp脚本
  • 原文地址:https://www.cnblogs.com/MakeView660/p/11275057.html
Copyright © 2011-2022 走看看