交叉编译的含义

交叉编译(Cross Compilation)是指在一个平台(称为“主机”,Host)上编译程序,生成能在另一个不同平台(称为“目标”,Target)上运行的可执行文件。这两个平台通常在 操作系统处理器架构 上存在差异。


举个例子:

  • x86 架构的 Windows 电脑 上,编译一个能在 ARM 架构的树莓派(运行 Linux)上运行的程序。
  • Mac(Apple Silicon) 上为 嵌入式设备(如 STM32、GD32)编译固件。

为什么需要交叉编译?

  1. 目标平台资源受限:很多嵌入式设备没有足够的存储、内存或性能来运行完整的编译器(如 GCC)。
  2. 开发效率高:在功能强大的 PC 上编写和编译代码,再部署到目标设备上运行,效率更高。
  3. 平台不兼容:目标设备可能根本无法运行开发环境(比如裸机 MCU)。

其他常见的编译方式

编译类型 描述
本地编译(Native Compilation) 在当前平台上编译,生成的程序也在当前平台运行。例如,在 Windows 上用 Visual Studio 编译 Windows 程序。
交叉编译(Cross Compilation) 在 A 平台上编译,生成 B 平台可运行的程序。常用于嵌入式、移动端、跨操作系统开发。
混合编译 / 跨平台构建 利用工具链(如 CMake、Docker)抽象平台差异,实现一次编写、多平台编译。

交叉编译的关键组成

  • 交叉编译工具链(Cross Compiler Toolchain):包含针对目标平台的编译器(如 arm-linux-gnueabi-gcc)、链接器、汇编器等。
  • 系统库与头文件:需匹配目标平台的操作系统(如 glibc、musl)。
  • 构建系统支持:CMake、Autotools 等可通过指定工具链文件支持交叉编译。