在 Ubuntu 上做 C++ 交叉编译,核心思路是:
在当前机器(Ubuntu)上,用“交叉编译器”生成能在目标平台(如 ARM、RISC‑V、Windows 等)上运行的可执行文件。
下面按常见场景一步一步说明。
sudo apt update
sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
验证:
arm-linux-gnueabihf-g++ --version
aarch64-linux-gnu-g++ --version
// main.cpp
#include <iostream>
int main() {
std::cout << "Hello cross compile!" << std::endl;
return 0;
}
arm-linux-gnueabihf-g++ main.cpp -o hello_arm
aarch64-linux-gnu-g++ main.cpp -o hello_arm64
file hello_arm
输出类似:
hello_arm: ELF 32-bit LSB executable, ARM, ...
表示该文件 不能在 x86 Ubuntu 上运行,只能放到 ARM 设备上运行。
sudo apt install mingw-w64
x86_64-w64-mingw32-g++ main.cpp -o hello.exe
i686-w64-mingw32-g++ main.cpp -o hello.exe
✅ 生成的 hello.exe 可直接在 Windows 运行。
sudo apt install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu
riscv64-linux-gnu-g++ main.cpp -o hello_riscv
toolchain-arm.cmake
set(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++)
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain-arm.cmake ..
make
✅ 非常适合大型 C++ 项目。
因为 CPU 架构不同(x86 ≠ ARM)。
需要:
示例:
--sysroot=/path/to/target/sysroot
uname -m
| 输出 | 含义 |
|---|---|
| x86_64 | 64 位 Intel/AMD |
| aarch64 | ARM 64 位 |
| armv7l | ARM 32 位 |
| 目标平台 | 编译器 |
|---|---|
| ARM 32 | arm-linux-gnueabihf-g++ |
| ARM 64 | aarch64-linux-gnu-g++ |
| Windows | x86_64-w64-mingw32-g++ |
| RISC-V | riscv64-linux-gnu-g++ |
如果你愿意,可以告诉我:
我可以给你 完全针对你项目的交叉编译方案。