交叉编译器理解

交叉编译器理解
交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。
我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如C代码)编译(compile)成计算机可以识别和执行的二进制代码。
本地编译:我们在Windows平台上,可使用Visual C++开发环境,编写程序并编译成可执行程序。
交叉编译:交叉编译可以理解为,在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种目标平台上,但是编译平台本身却不能运行该程序:
比如,我们在 x86 平台上,编写程序并编译成能运行在 ARM 平台的程序,编译得到的程序在 x86 平台上是不能运行的,必须放到 ARM 平台上才能运行。
为什么会有交叉编译器?
在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的 ARM 平台,其一般的RAM大概是16到64MB,而CPU的主频大概在100MHz到500MHz之间。这种情况下,在ARM平台上进行本机编译就不太可能了,这是因为一般的编译工具链(compilation tool chain)需要很大的存储空间,并需要很强的CPU运算能力。另外,在ARM上的操作系统跑起来之前,我们需要在其他平台上编译一个可以在ARM平台上运行的操作系统。
交叉编译链:
交叉编译链就是为了编译跨平台体系结构的程序代码而形成的由多个子工具构成的一套完整的工具集。同时,它隐藏了预处理、编译、汇编、链接等细节,当我们指定了源文件(.c)时,它会自动按照编译流程调用不同的子工具,自动生成最终的二进制程序映像(.bin)。
GNU工具链中包括编译器(cc)、连接器(ld)、汇编器(as)以及调试器(gdb),
c运行库:(如glibc,uclibc)C函数库构成Linux内核之上的一个薄层并提供了许多有用的例程,如果这些例程都由Linux内核自身来提供,付出的代
价将相当昂贵(根据代码效率和增加的复杂性)。事实上,当你要求GCC执行编译,链接生成可执行程序时,GCC会默认
将这些C函数库链接进可执行程序中。由于这一过程发生在连接阶段,所以还需要你在应用程序源代码中添加函数库的头
文件以提供库函数自身的原型定义,如include <stdio.h>等
命名规则:
arch-core-kernel-system
  • arch: 用于哪个目标平台。
  • core: 使用的是哪个CPU Core,如Cortex A8,但是这一组命名好像比较灵活,在其它厂家提供的交叉编译链中,有以厂家名称命名的,也有以开发板命名的,或者直接是none或cross的。
  • kernel: 所运行的OS,见过的有Linux,uclinux,bare(无OS)。
  • system:交叉编译链所选择的库函数和目标映像的规范,如gnu,gnueabi等。其中gnu等价于glibc+oabi;gnueabi等价于glibc+eabi。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值