在 Ubuntu 上做 C++ 交叉编译,核心就是:用本机(x86_64 Ubuntu)的编译器,生成在其他架构(如 ARM、RISC-V、aarch64)上可运行的程序。
下面按“最常见场景”给你一个清晰、可操作的说明。
常见目标平台:
arm-linux-gnueabihf)aarch64-linux-gnu)riscv64-linux-gnu)下面以 ARM64(aarch64) 为例,其他架构几乎一样。
sudo apt update
sudo apt install g++-aarch64-linux-gnu gcc-aarch64-linux-gnu
安装完成后,编译器名称是:
aarch64-linux-gnu-g++
hello.cpp
#include <iostream>
int main() {
std::cout << "Hello ARM64\n";
return 0;
}
aarch64-linux-gnu-g++ hello.cpp -o hello_arm64
查看文件类型:
file hello_arm64
你会看到类似:
hello_arm64: ELF 64-bit LSB executable, ARM aarch64
✅ 说明已经是 ARM64 程序了。
sudo apt install qemu-user-static
./hello_arm64
scp hello_arm64 user@arm-board:/home/user/
toolchain.cmakeset(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
mkdir build && cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake ..
make
| 目标平台 | 编译器 |
|---|---|
| ARM32 | arm-linux-gnueabihf-g++ |
| ARM64 | aarch64-linux-gnu-g++ |
| RISC-V | riscv64-linux-gnu-g++ |
| Windows | x86_64-w64-mingw32-g++ |
你需要:
not found多半是 动态链接器或库不匹配
aarch64-linux-gnu-g++ hello.cpp -static -o hello_static
Ubuntu 上交叉编译 C++ =
安装xxx-linux-gnu-g++→ 用它对代码编译 → 在目标平台运行
如果你告诉我:
我可以直接给你针对性的完整示例。