温馨提示×

c++在ubuntu怎么交叉编译

小樊
48
2026-10-02 10:58:53
栏目: 编程语言

在 Ubuntu 上做 C++ 交叉编译,核心就是:用本机(x86_64 Ubuntu)的编译器,生成在其他架构(如 ARM、RISC-V、aarch64)上可运行的程序。

下面按“最常见场景”给你一个清晰、可操作的说明。


一、先明确你要交叉编译到什么平台

常见目标平台:

  • ARM32(arm-linux-gnueabihf)
  • ARM64 / aarch64(aarch64-linux-gnu)
  • RISC-V(riscv64-linux-gnu)
  • Windows(MinGW)

下面以 ARM64(aarch64) 为例,其他架构几乎一样。


二、安装交叉编译工具链(Ubuntu 自带)

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

安装完成后,编译器名称是:

aarch64-linux-gnu-g++

三、写一个最简单的 C++ 程序

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 程序了。


五、在 Ubuntu 上运行(可选)

方法 1:用 QEMU 模拟运行

sudo apt install qemu-user-static
./hello_arm64

方法 2:拷贝到 ARM 设备(树莓派、开发板)

scp hello_arm64 user@arm-board:/home/user/

六、CMake 交叉编译(推荐方式)

1. 写工具链文件 toolchain.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. 编译

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

八、常见问题

1️⃣ 找不到头文件 / 库

你需要:

  • 交叉编译依赖库
  • 或用 sysroot

2️⃣ 运行时报 not found

多半是 动态链接器或库不匹配

3️⃣ 静态编译(避免依赖)

aarch64-linux-gnu-g++ hello.cpp -static -o hello_static

九、总结一句话

Ubuntu 上交叉编译 C++ =
安装 xxx-linux-gnu-g++ → 用它对代码编译 → 在目标平台运行

如果你告诉我:

  • 目标芯片(树莓派?Jetson?RK3588?)
  • 是否用 CMake
  • 是否涉及第三方库

我可以直接给你针对性的完整示例。

0 踩