为何要有交叉编译
之所以要有交叉编译,主要原因是:
嵌入式系统中的资源太少
具体的解释就是:
交叉编译出来的程序,所要运行的目标环境中,各种资源,都相对有限,所以很难进行直接的本地编译
最常见的情况是:
在进行嵌入式开发时,目标平台,即嵌入式开发板,比如是最大主频200MHz的ARM的CPU,加上32M的RAM,加上1G的Nand Flash等等。
在如此相对比较紧张的硬件资源的前提下,在已经运行了嵌入式Linux的前提下,是没法很方便的,直接在嵌入式Linux下,去本地编译,去在ARM的CPU下,编译出来,供ARM的CPU可以运行的程序的。
因为编译,开发,都需要相对比较多的CPU,内存,硬盘等资源,而嵌入式开发上的那点资源,只够嵌入式(Linux)系统运行的,没太多剩余的资源,供你本地编译。
![]() |
BusyBox中包含make等和编译开发相关的工具 |
---|---|
对应的,等你后期熟悉了嵌入式开发,熟悉了Busybox后, 比如在Buildroot中去配置Busybox,或者单独交叉编译BusyBox时: 【记录】Ubuntu下为QEMU的arm平台交叉编译BusyBox 就会看到,后来的BusyBox,功能增加后,也已经包含了一些,和编译开发相关的工具,比如make等等 而这些工具,本来的话,只是,放在PC端使用,即在x86平台下做开发的时候,在交叉编译的时候,才用到的工具, 现在,也在(BusyBox的)嵌入式环境中,支持了。 此时,如果,你在BusyBox中把相关的开发工具都选上的话, 再加上,你的目标开发板的硬件配置足够强大的话,比如CPU都是以GHz为单位,等等 加上相关的开发的库和工具都很全的话 实际上,至少理论上,也是可以在你的嵌入式Linux中,进行,有限的,甚至是很大程度上的,本地开发 即,直接在ARM的开发板上,嵌入式Linux中,直接进行嵌入式开发,进行针对ARM的本地编译 比如,编译出一个helloworld,估计还是可以的 这样,就不存在,或者说,避免了,此处所说的,交叉编译,而变成了本地编译 就相当于,之前在x86的PC端的,编译程序放在x86的CPU上运行的本地编译, 在ARM的CPU,嵌入式Linux中,也实现了 但是很明显,对于更加复杂的程序或者库,在ARM开发板上直接编译的可行性和效率,相对就很低 而且如果是本身折腾Uboot等东西,本身目标运行环境,就没有完整的(嵌入式Linux)系统的话,那么就更加没法在目标平台实现本地编译了。 则还是只能进行,此处所说的,交叉编译 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2016-05-10 WPF学习笔记-用Expression Blend制作自定义按钮
2016-05-10 WPF学习笔记-用Expression Design制作矢量图然后导出为XAML
2015-05-10 boost库之多线程间通信