关注本公众号↑,积跬步,至千里
嵌入式开发过程中经常会涉及交叉编译,那么什么是交叉编译,为什么需要交叉编译,在这篇文章中我们一起来梳理下。
什么是交叉编译
在回答这个问题之前,先弄明白两个概念:
- 本地编译(
host build
)本地编译可以理解为,在当前编译平台下,编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发都是属于本地编译:比如,我们在 x86 平台上(操作系统可能是windows/linux/macos等),编写程序并编译成可执行程序。这种方式下,我们使用 x86 平台上的工具,开发针对 x86 平台本身的可执行程序,这个编译过程称为本地编译。 - 交叉编译(
cross compiling for target platform
)交叉编译可以理解为,在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种目标平台上,但是编译平台本身却不能运行该程序:比如,我们在 x86 平台上,编写程序并编译成能运行在 ARM 平台的程序,编译得到的程序在 x86 平台上是不能运行的,必须放到 ARM 平台上才能运行。通常,如果我们需要在当前pc环境编译生成其他设备上才能运行的目标文件时候,就需要通过对应的交叉编译工具链来编译生成它们,比如在win/macos上编译linux的程序,或者在linux上编译其他嵌入式设备的目标文件等。在嵌入式产品开发过程中,Linux+Qt+SoC
的方案和FreeRTOS+QUL+MCU
的方案都会涉及交叉编译。
为什么需要交叉编译
之所以要有交叉编译,主要原因是:
- Speed:目标平台的运行速度往往比主机慢得多,许多专用的嵌入式硬件被设计为低成本和低功耗,没有太高的性能
- Capability:整个编译过程是非常消耗资源的,嵌入式系统往往没有足够的内存或磁盘空间
- Availability:即使目标平台资源很充足,可以本地编译