交叉编译学习笔记

1. 相关概念

定义

在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种目标平台上,但是编译平台本身却不能运行该程序,如下图所示。
在这里插入图片描述
在这里插入图片描述

解决的问题

  • Speed
    目标平台的运行速度往往比主机慢得多,许多专用的嵌入式硬件被设计为低成本和低功耗,没有太高的性能
  • Capability
    整个编译过程是非常消耗资源的,嵌入式系统往往没有足够的内存或磁盘空间
  • Availability
    即使目标平台资源很充足,可以本地编译,但是第一个在目标平台上运行的本地编译器总需要通过交叉编译获得
  • Flexibility
    一个完整的Linux编译环境需要很多支持包,交叉编译使我们不需要花时间将各种支持包移植到目标板上

难点

1)不同的体系架构拥有不同的机器特性

  • Word Size:32-bit 还是 64-bit
  • Endianness:是大端系统还是小端系统
  • Alignment:是否必须按照4字节对齐方式进行访问
  • Default Signedness:默认数据类型是否有符号
  • NOMMU:是否支持MMU

2)交叉编译时的主机环境与目标环境不同
Configuration Issues, HOSTCC vs TARGETCC, Toolchain Leaks, Libraries, Testing

2. 交叉编译流程

编译过程是按照不同的子功能,依照先后顺序组成的一个复杂的流程,如下图所示。
在这里插入图片描述

编译过程主要包括了四大功能:预处理、编译、汇编和链接。

  • 预处理(Preprocessing):将每个源文件所需要的代码都放在自己文件里,然后方便下一步处理;
  • 编译(Compilation):把C/C++代码翻译成汇编代码,能够有效地减弱编译器编写的复杂性,并方便后续的优化与调试;
  • 汇编(Assembly):利用汇编器将第二步输出的汇编代码翻译成符合一定格式的机器代码;
  • 链接(Linking):将汇编生成的OBJ文件、系统库的OBJ文件、库文件链接起来,即将各个ELF文件重新排序成一个ELF文件,最终生成可以在特定平台运行的可执行程序。

3. 交叉编译链命名格式

arch-core-kernel-system

arch:目标平台
core:使用的CPU Core
kernel:所运行的操作系统
system:交叉编译链所选择的库函数和目标映像的规范

参考链接
本地编译与交叉编译的对比
交叉编译详解 一 概念篇
重新理解Linux交叉编译及编译流程

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值