linux交叉编译是指在一个处理器架构的主机系统上,生成能够在另一种不同处理器架构目标设备上运行的二进制程序的过程。在嵌入式linux开发中,我们通常在性能较强的x86个人电脑或服务器上,使用专门的交叉编译工具链,编译出适用于arm、mips等架构开发板的程序。

为什么需要交叉编译
目标设备如arm开发板通常计算能力有限、内存和存储空间较小,直接在板子上编译大型项目会非常缓慢甚至不可行。而x86主机资源丰富,编译速度快,因此开发者习惯在主机完成编译,再把生成的文件拷贝到设备运行。
- 目标平台性能不足,无法流畅编译
- 加快开发迭代速度
- 统一构建环境,便于持续集成
交叉编译工具链是什么
交叉编译工具链是一套针对目标架构改写的编译器、链接器和相关库。例如 arm-linux-gnueabihf-gcc 就是常用的32位arm linux交叉编译器。它和本机gcc的区别在于,输出的机器码面向arm而非x86。
在x86 linux主机安装arm工具链
以ubuntu为例,可以通过包管理器直接安装:
# 更新软件源 sudo apt update # 安装arm硬浮点交叉编译器 sudo apt install gcc-arm-linux-gnueabihf # 查看版本确认安装成功 arm-linux-gnueabihf-gcc --version
编写并交叉编译一个简单程序
下面写一个简单的c程序,并在x86主机上编译成arm可执行文件。
#include <stdio.h>
int main() {
// 打印一句简单的话
printf("hello from arm linuxn");
return 0;
}
将上面代码保存为 hello.c,然后使用交叉编译器构建:
# 使用arm交叉编译器编译 arm-linux-gnueabihf-gcc hello.c -o hello_arm # 查看生成文件架构信息 file hello_arm
执行 file 命令后,你会看到它显示为 arm 架构的可执行文件,说明交叉编译成功。
常见误区说明
有些新手会把本机编译和交叉编译混淆。注意,在主机直接运行 gcc 生成的是x86程序,无法在arm板子运行;必须使用带前缀的交叉编译器。另外,文中提到的 <stdio.h> 是标准头文件,不是html标签,写作时应当避免误写成标签形式。
小结
理解linux交叉编译最关键的一点,就是分清编译机和运行机。只要选对工具链,交叉编译和普通编译在操作上并没有太大差别。掌握它,你就迈出了嵌入式linux开发的第一步。
linux交叉编译arm交叉工具链x86_to_arm交叉编译环境搭建修改时间:2026-07-24 15:24:18