armgcc交叉编译的文件无法运行_新手入门交叉编译--交叉编译碎碎念

零 行文逻辑

这是一个新手入门入门交叉编译的小白贴,分为三个部分,第一部分直观介绍不同的计算机平台之间的可执行文件不互通,第二部分介绍交叉编译解决不同平台软件编译时间问题,第三部分介绍x86 linux下编译arm linux的编译器arm linux gcc相关知识。

一 什么是交叉编译

我们知道计算机有不同的架构:如经常听到的x86,这是大多数pc的平台;也有用在嵌入式设备里的arm平台;还有IBM的powerPC架构。为什么会有不同的架构呢?主要是不同架构解决了不同的问题,一般来说,x86架构的性能比较强悍,而arm架构可能更加适合低功耗。(一句话总结,计算机架构不同是有历史原因的。)

不同架构之间存在一个明显差异,就是可执行文件不一定互通。意识就是x86架构下的可执行文件(二进制),到了arm架构下,大约是不能直接运行的。简单举个例子,安卓应用不能直接跑在iPhone上。我们都知道,二进制可执行文件都是由代码编译而来的,这里的代码就是程序员说的helloworld。同一份代码要在不同的平台上跑起来,是要通过不同的编译流程的。在这个编译流程中,最核心的就是编译器。

具体而言,在linux x86平台上,有编译linux x86的编译器,如gcc。而在linux arm平台上,有编译arm的编译器。这两个编译器编译同一份代码,都能在自己对应的平台上运行。如果拿到对方平台,就会有极大可能是跑不起来的。

二 交叉编译--横空出世

不同平台编译出软件不互通,这是十分符合直觉思维的事情,看起来也没有什么问题。但是,当我们从新思考编译这一件事情的时候,我们就会发现,编译并不是简单轻松的事情,它是很消耗资源的。而这些资源,一定是对应平台所能够提供的。可以看到在树莓派上编译tensorflow大约编译到地老天荒。

所以有没有解决办法呢?交叉编译横空出世了。一种很直观的理解就是,x86平台硬件资源很好,有大内存,好的cpu,大容量的存储,我在x86平台上编译一个能够在arm平台上运行的可执行文件。而x86平台上编译出来的这个可执行文件,反而不能在x86平台上跑。

三 x86 linux 编译arm linux编译器介绍

请参考:

arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别​www.veryarm.com
00766b032661c02c941407964cb05c06.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值