在 Debian 上用 GCC 进行交叉编译,通常分三步:
1️⃣ 安装交叉编译工具链
2️⃣ 使用交叉编译器编译程序
3️⃣(可选)在目标平台或模拟器中运行/测试
下面以 常见架构 为例说明。
Debian 提供了现成的交叉编译包,命名规则一般是:
gcc-<arch>-linux-gnu
| 目标架构 | 安装命令 |
|---|---|
| ARM 32位 | sudo apt install gcc-arm-linux-gnueabihf |
| AArch64 | sudo apt install gcc-aarch64-linux-gnu |
| RISC-V | sudo apt install gcc-riscv64-linux-gnu |
| MIPS | sudo apt install gcc-mips-linux-gnu |
| PowerPC | sudo apt install gcc-powerpc-linux-gnu |
以 ARM32(arm-linux-gnueabihf) 为例:
// hello.c
#include <stdio.h>
int main() {
printf("Hello Cross Compile!\n");
return 0;
}
arm-linux-gnueabihf-gcc hello.c -o hello
file hello
输出类似:
hello: ELF 32-bit LSB executable, ARM, ...
说明已经是 ARM 架构的可执行文件。
如果你的程序依赖目标系统的库(如 glibc、头文件),需要指定 --sysroot:
arm-linux-gnueabihf-gcc \
--sysroot=/path/to/arm-rootfs \
hello.c -o hello
arm-rootfs 通常来自:
debootstrap修改 Makefile:
CC = arm-linux-gnueabihf-gcc
或直接传参:
make CC=arm-linux-gnueabihf-gcc
toolchain.cmakeset(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
set(CMAKE_FIND_ROOT_PATH /path/to/sysroot)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ..
make
把 hello 拷到 ARM 板:
scp hello user@arm-board:/tmp
ssh user@arm-board
/tmp/hello
sudo apt install qemu-user
qemu-arm ./hello
✅ 使用 --sysroot 或安装对应 libc-dev:
sudo apt install libc6-dev-armhf-cross
✅ 用 file 和 uname -m 确认目标架构
如果你告诉我:
我可以给你更精确的交叉编译方案。