温馨提示×

ubuntu c++交叉编译怎么配

小樊
35
2026-10-05 08:27:09
栏目: 编程语言

下面按常见需求给你一个清晰、可落地的 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) 为例,其他平台同理。


二、安装交叉编译器(Ubuntu)

sudo apt update
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

验证:

aarch64-linux-gnu-g++ --version

三、最简单的交叉编译(命令行)

1️⃣ 单文件示例

// 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

四、使用 CMake(推荐 ✅)

1️⃣ 编写工具链文件

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)

2️⃣ CMake 编译

mkdir build && cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain-aarch64.cmake ..
make

五、链接第三方库(重点 ⚠️)

千万不要用 Ubuntu 本机的库

正确做法:

  • 使用 目标平台的 sysroot
  • 或用 交叉编译好的依赖

示例:指定 sysroot

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

✅ 解决:

  • 确认 --sysroot
  • file libxxx.so 看架构

❌ cannot find -lxxx

→ 没放对路径

✅ 解决:

link_directories(/opt/aarch64-rootfs/usr/lib)

七、进阶(可选)

  • ✅ crosstool-NG 自定义工具链
  • ✅ buildroot / yocto 生成 rootfs
  • ✅ Clang 交叉编译
  • ✅ Docker 交叉编译环境

八、我可以继续帮你的点

你可以直接告诉我:

  1. 目标平台(ARM / RISC-V / MIPS?)
  2. 用不用 CMake?
  3. 是否需要第三方库(OpenCV / Boost / Qt?)
  4. 是在 Ubuntu x86 上编,还是 Docker?

我可以直接给你可用模板。

0 踩