下面以在 Debian 上用 GCC 进行交叉编译为例,按常见场景给你一个清晰、可操作的说明。
交叉编译 = 在一种架构的机器上,编译出另一种架构的可执行程序
例如:
dpkg --list | grep gcc | grep arm
或搜索:
apt search gcc-arm
sudo apt update
sudo apt install gcc-arm-linux-gnueabihf
sudo apt install gcc-aarch64-linux-gnu
sudo apt install gcc-riscv64-linux-gnu
sudo apt install gcc-mips-linux-gnu
安装后编译器名称通常是:
arm-linux-gnueabihf-gcc
aarch64-linux-gnu-gcc
riscv64-linux-gnu-gcc
// hello.c
#include <stdio.h>
int main() {
printf("Hello Cross Compile\n");
return 0;
}
arm-linux-gnueabihf-gcc hello.c -o hello_arm
aarch64-linux-gnu-gcc hello.c -o hello_arm64
file hello_arm
输出类似:
ELF 32-bit LSB executable, ARM
当程序依赖目标平台的库时,需要 sysroot:
aarch64-linux-gnu-gcc \
--sysroot=/path/to/aarch64/sysroot \
hello.c -o hello
sysroot 通常来自:
# toolchain-arm.cmake
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain-arm.cmake ..
make
✅ 安装目标头文件:
apt install libstdc++-dev-armhf-cross
✅ 确认:
uname -m
file your_binary
你可以告诉我:目标平台是什么(ARM?RISC-V?) + 用途(应用 / 内核 / 嵌入式)