下面按常见需求给你一个清晰、可落地的 Ubuntu 下 C++ 交叉编译配置指南,从最简方案到进阶 CMake / 工具链文件。
先明确你要交叉编译到哪:
| 目标 | 典型架构 | 工具链示例 |
|---|---|---|
| ARM32 | arm-linux-gnueabihf | gcc-arm-linux-gnueabihf |
| ARM64 | aarch64-linux-gnu | gcc-aarch64-linux-gnu |
| MIPS | mipsel-linux-gnu | gcc-mipsel-linux-gnu |
| RISC-V | riscv64-linux-gnu | gcc-riscv64-linux-gnu |
下面以 ARM64 (aarch64) 为例,其他平台同理。
sudo apt update
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
验证:
aarch64-linux-gnu-g++ --version
// main.cpp
#include <iostream>
int main() {
std::cout << "Hello ARM64\n";
}
编译:
aarch64-linux-gnu-g++ main.cpp -o main
查看架构:
file main
输出类似:
main: ELF 64-bit LSB executable, ARM aarch64
toolchain-aarch64.cmake
set(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-aarch64.cmake ..
make
千万不要用 Ubuntu 本机的库
正确做法:
set(CMAKE_SYSROOT /opt/aarch64-rootfs)
或命令行:
aarch64-linux-gnu-g++ main.cpp \
--sysroot=/opt/aarch64-rootfs \
-I/opt/aarch64-rootfs/usr/include \
-L/opt/aarch64-rootfs/usr/lib
file not found / skipping incompatible→ 用了 x86 的 .so
✅ 解决:
--sysrootfile libxxx.so 看架构cannot find -lxxx→ 没放对路径
✅ 解决:
link_directories(/opt/aarch64-rootfs/usr/lib)
crosstool-NG 自定义工具链buildroot / yocto 生成 rootfs你可以直接告诉我:
我可以直接给你可用模板。