交叉编译的含义
交叉编译的含义
交叉编译(Cross Compilation)是指在一个平台(称为“主机”,Host)上编译程序,生成能在另一个不同平台(称为“目标”,Target)上运行的可执行文件。这两个平台通常在 操作系统 或 处理器架构 上存在差异。
举个例子:
- 在 x86 架构的 Windows 电脑 上,编译一个能在 ARM 架构的树莓派(运行 Linux)上运行的程序。
- 在 Mac(Apple Silicon) 上为 嵌入式设备(如 STM32、GD32)编译固件。
为什么需要交叉编译?
- 目标平台资源受限:很多嵌入式设备没有足够的存储、内存或性能来运行完整的编译器(如 GCC)。
- 开发效率高:在功能强大的 PC 上编写和编译代码,再部署到目标设备上运行,效率更高。
- 平台不兼容:目标设备可能根本无法运行开发环境(比如裸机 MCU)。
其他常见的编译方式
| 编译类型 | 描述 |
|---|---|
| 本地编译(Native Compilation) | 在当前平台上编译,生成的程序也在当前平台运行。例如,在 Windows 上用 Visual Studio 编译 Windows 程序。 |
| 交叉编译(Cross Compilation) | 在 A 平台上编译,生成 B 平台可运行的程序。常用于嵌入式、移动端、跨操作系统开发。 |
| 混合编译 / 跨平台构建 | 利用工具链(如 CMake、Docker)抽象平台差异,实现一次编写、多平台编译。 |
交叉编译的关键组成
- 交叉编译工具链(Cross Compiler Toolchain):包含针对目标平台的编译器(如
arm-linux-gnueabi-gcc)、链接器、汇编器等。 - 系统库与头文件:需匹配目标平台的操作系统(如 glibc、musl)。
- 构建系统支持:CMake、Autotools 等可通过指定工具链文件支持交叉编译。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Fleming's Blog!

