嵌入式开发中的交叉编译详解

在嵌入式开发中,经常会遇到目标平台资源贫乏,无法运行需要的编译器。亦或是目标平台上不允许或不能够安装需要的编译器。这时候就需要使用交叉编译了。
交叉编译
本地编译:在当前目标平台下,编译出来的程序,放到当前平台下,就可以运行的
交叉编译:在一种平台上编译,编译出来的程序,放到别的平台上运行(编译和运行环境不一样,属于交叉的)
这里所谓的平台,实际上包含两个概念:体系结构和 操作系统 。同一体系结构可以运行不同的操作系统,同一操作系统也可以在不同的体系结构上运行。
比如x86 linux平台,实际上是intel x86体系结构和linux for x86操作系统的统称。
再比如x86 winnt平台,实际上是intel x86体系结构和windows nt for x86操作系统的统称。
交叉编译是一个和本地编译,相对应的概念。主要和嵌入式开发有关,由于嵌入式系统中的各种资源相对有限,只够嵌入式系统运行的,没太多剩余的资源,所以很难进行直接的本地编译。
交叉编译工具链
编译过程是按照不同的子功能,依照先后顺序组成的一个复杂的流程,如下图:
编译过程包括了预处理、编译、汇编、链接等功能。每个子功能都是一个单独的工具来实现,它们合在一起形成了一个完整的工具集。
同时编译过程又是一个有先后顺序的流程,牵涉到工具的使用顺序,每个工具按照先后关系串联在一起,形成了一个编译工具链。
交叉编译工具链就是为了编译跨平台体系结构的程序代码而形成的由多个子工具构成的一套完整的工具集。
同时,它隐藏了预处理、编译、汇编、链接等细节,当我们指定了源文件(.c)时,它会自动按照编译流程调用不同的子工具,自动生成最终的二进制程序映像(.bin)。
交叉编译工具链命名规则 :
在使用交叉编译链时,常常会看到下面这样的名字:
arm-linux-gnueabihf-arm-none-linux-gnueabi-arm-cortex_a8-linux-gnueabi-mips-malta-linux-gnu-  
这些交叉编译链的命名通常会遵循一定的规则:arch-vender-os-abi,各字段说明如下:
arch:目标cpu架构,比如mips、arm、x86、riscv等,通常不会省略
vendor:提供此编译工具链的厂商名称或特定信息,标识信息,没有实际意义,可以为none、cross、unknow或是直接省略
os:目标设备上运行的操作系统,常见的有linux、none(裸机)等
abi:应用程序二进制接口,交叉编译链所选择的库函数和目标映像的规范,常见的值有abi 、eabi(embedded abi)、gun(glibc+oabi)、gnueabi(glibc+eabi)、gnueabihf(hf 指默认编译参数支持硬件浮点功能)等


荣耀正式官宣将于5月21日晚9点在伦敦发布荣耀20系列手机
全球能源互联网金融联盟和装备联盟正式揭牌成立
2017年这8款一定大卖的手机,诺基亚8和小米6纷纷上榜
ADI公司利用RadioVerse™技术和设计生态系统简化无线系统设计
诺基亚8什么时候上市?诺基亚8最新消息:骁龙835+双摄+6GB,售价4000元起
嵌入式开发中的交叉编译详解
KDDI计划未来十年投资2万亿日元用于发展5G和6G
Keil for ARM 5.33版创建工程时候的注意事项
五个步骤教你如何防止你的监控摄像头系统被黑客入侵
数据与电源隔离电路获得混合动力汽车电池管理质量认证
2022年到底哪类电视更加值得入手
山西省已确定大同市为山西省燃料电池汽车示范城市申报的牵头城市
ULN2003芯片的主要作用
功率电感厂商科普贴片功率电感的封装规格影响因素
技术速递 | 分布式政企应用如何快速实现云原生的微服务架构改造
三大控制系统PLC、DCS和FCS的特点介绍
关于三合一食品安全检测仪的功能特点介绍
安卓手机当做笔记本的辅屏?华硕就要给实现了
超级系统的开发加速了多处理器的设计
半导体厂展望Q1营收不同调 联发科保守台积电消极