一文搞懂交叉编译(一)——什么是交叉编译以及为什么要交叉编译

一、什么是交叉编译:

目前的电子设备的计算和存储都是基于2进制,亦即是01010110....这种形式的数据。而我们编程所使用语言最低也是汇编,更高级的像C,C++等。所以使用这些语言所编辑的代码并不能被机器直接识别并执行,而必须要通过一定的转变后才能变成机器可执行的程序,这个转换过程一般统称为编译(区分于整个过程中的编译那一步),这也即是其必要性的原因。

程序开发一般有两种情形,第一种是在一种设备上开发,编译生成的程序在同类设备上运行,如我们电脑里的office等,这种叫本地编译。

第二种则是在一种设备上进行编辑、编译(宿主机),而生成的执行程序却在另一种设备上执行(目标机),即开发环境和运行环境不一样,如单片机、嵌入式系统程序,这就是交叉编译。

二、为什么要交叉编译:

更深层的问题是:为什么要在宿主机上进行开发,而不直接在目标机上进行?

最主要的原因是:目标机资源太有限了(出于成本考虑,其硬件资源一般都只能满足特定功能需求),难以支撑开发环境的运行需求:如CPU占用,内存开销,硬盘占用等,对比下硬件资源吧:

单片机一般的硬件资源:CPU主频<=100MHZ,RAM<=100KB,FLASH<=2MB;

嵌入式系统一般的硬件资源:CPU主频<=1GHZ,RAM<=2GB,FLASH<=8GB。

而通用电脑的硬件资源:CPU主频>=1.5GHZ,4GB以上的内存,250GB以上的磁盘。

显而易见,通用电脑的硬件资源能够较好地满足开发需求,而且像单片机这种情况,是根本没法运行开发环境的,也只能在通用主机上开发。当然,也有像树莓派这种,可以在设备本地开发运行。但运行开发环境,特别是QtCreator时,其卡顿程度,足以让人怀疑。。。

另一方面来说,在通用电脑上进行开发,也不会有较大的学习成本。换一个目标平台,至多去熟悉一下目标机特性及新的开发IDE。

程序开发流程之一是编辑的代码,都需要通过编译才能转变成机器可执行的程序。

只是我们以程序的开发环境与执行环境差异而作了各种区分。还要注意的是不同的开发环境和执行环境,都需要不同的编译工具(关系能否运行、能否生成),如下例:

1、Windows里开发Windows应用和开发Linux应用所使用的编译工具不一样,因为编译目标平台不一样;

2、Windows里开发Windows应用和Ubuntu里开发Ubuntu应用所使用的编译工具不一样,因为工具运行平台和编译目标平台不一样;

2、Windows和Ubuntu开发同一嵌入式目标平台程序所使用的编译工具也不一样,虽然都是交叉编译,但还要满足编译工具可运行的条件。

参考资料:https://www.crifan.com/files/doc/docbook/cross_compile/release/html/cross_compile.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值