RK3588 Debian 交叉编译环境搭建(Windows + VMware Debian + CMake)

最近需要将一个 C++ 程序部署到 RK3588 Debian 系统运行,领导提供了一套交叉编译工具链:

复制代码
rk3588_5.15.2.tar.gz

工具链位于:

复制代码
rk3588_5.15.2/host/bin/

其中包含:

复制代码
aarch64-buildroot-linux-gnu-gcc
aarch64-buildroot-linux-gnu-g++

本文记录从工具链验证、CMake 配置到成功编译 ARM64 程序的完整流程。

一、环境说明

开发环境:

  • Windows 11
  • VMware Workstation
  • Debian x86_64
  • CMake
  • Buildroot Toolchain

目标环境:

  • RK3588
  • Debian ARM64(aarch64)

整体流程如下:

复制代码
Windows
    │
    │ 编写代码
    ▼
Debian x86_64 虚拟机
    │
    │ aarch64-buildroot-linux-gnu-g++
    ▼
ARM64 ELF
    │
    │ SCP / WinSCP
    ▼
RK3588 Debian

二、准备交叉编译工具链

将 SDK 解压到:

复制代码
/opt/rk3588_sdk/

目录结构例如:

复制代码
/opt/rk3588_sdk/

├── rk3588_5.15.2
│   └── host
│       └── bin
│           ├── aarch64-buildroot-linux-gnu-gcc
│           └── aarch64-buildroot-linux-gnu-g++

三、验证工具链是否正常

进入工具链目录:

复制代码
cd /opt/rk3588_sdk/rk3588_5.15.2/host/bin

查看版本:

复制代码
./aarch64-buildroot-linux-gnu-g++ --version

查看目标平台:

复制代码
./aarch64-buildroot-linux-gnu-g++ -dumpmachine

正常输出:

复制代码
aarch64-buildroot-linux-gnu

查看默认 sysroot:

复制代码
./aarch64-buildroot-linux-gnu-g++ -print-sysroot

如果能够正常输出 sysroot 路径,说明工具链基本可用。


四、安装 CMake

Debian 默认可能未安装 CMake。

安装:

复制代码
sudo apt update

sudo apt install cmake

验证:

复制代码
cmake --version

五、创建 Toolchain 文件

新建:

复制代码
nano /opt/rk3588_sdk/toolchain-rk3588.cmake

内容如下:

复制代码
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)


# 你的SDK路径
set(TOOLCHAIN_DIR /home/jkt/rk3588_5.15.2)


# C编译器
set(CMAKE_C_COMPILER
    ${TOOLCHAIN_DIR}/host/bin/aarch64-buildroot-linux-gnu-gcc)


# C++编译器
set(CMAKE_CXX_COMPILER
    ${TOOLCHAIN_DIR}/host/bin/aarch64-buildroot-linux-gnu-g++)


# 如果SDK里面有sysroot,需要填写
set(CMAKE_SYSROOT
    ${TOOLCHAIN_DIR}/host/aarch64-buildroot-linux-gnu/sysroot)


set(CMAKE_FIND_ROOT_PATH
    ${CMAKE_SYSROOT})


set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)

set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

六、编写测试程序

main.cpp:

复制代码
#include <iostream>

int main()
{
    std::cout << "Hello RK3588!" << std::endl;
    return 0;
}

七、编写 CMakeLists.txt

复制代码
cmake_minimum_required(VERSION 3.10)

project(test_rk3588)

set(CMAKE_CXX_STANDARD 17)

add_executable(
    test_rk3588
    main.cpp
)

target_link_libraries(
    test_rk3588
    pthread
)

八、开始交叉编译

创建编译目录:

复制代码
mkdir build

cd build

生成 Makefile:

复制代码
cmake .. \
-DCMAKE_TOOLCHAIN_FILE=/opt/rk3588_sdk/toolchain-rk3588.cmake

开始编译:

复制代码
make -j8

成功后会生成:

复制代码
test_rk3588

九、验证是否编译为 ARM 程序

执行:

复制代码
file test_rk3588

输出类似:

复制代码
ELF 64-bit LSB pie executable,
ARM aarch64

说明程序已经成功交叉编译为 ARM64 可执行文件。


十、查看动态依赖

由于当前开发机是 x86_64,因此不要使用:

复制代码
ldd test_rk3588

否则会提示不是可执行程序或无法识别。

应使用工具链提供的 readelf:

复制代码
/opt/rk3588_sdk/rk3588_5.15.2/host/bin/aarch64-buildroot-linux-gnu-readelf -d test_rk3588

例如输出:

复制代码
NEEDED Shared library:
libpthread.so.0

libstdc++.so.6

libm.so.6

libgcc_s.so.1

libc.so.6

ld-linux-aarch64.so.1

这些均属于 Debian ARM64 系统基础运行库,通常由目标系统提供。


十一、第三方库如何处理

需要区分两类库。

系统运行库

例如:

复制代码
libc.so.6
libstdc++.so.6
libpthread.so.0
libm.so.6

这些一般无需自行打包。


第三方库

例如:

复制代码
PortAudio
CSerialPort
SQLite(自行编译)

必须使用相同的 ARM64 工具链重新编译。

不能直接使用:

  • Windows 编译出的库
  • x86_64 Linux 编译出的库

否则程序无法链接,或者运行时报:

复制代码
Exec format error

接下来就只差将程序打包拷贝到目标系统上,然后解压运行即可。

总结

整个交叉编译流程的核心有以下几点:

  1. 使用 Buildroot 提供的 aarch64-buildroot-linux-gnu-gcc/g++ 编译 ARM64 程序。
  2. 推荐使用 CMake 管理项目,通过 toolchain.cmake 切换不同平台的编译器。
  3. 交叉编译生成的 ARM 程序不能在 x86_64 开发机直接运行,只能放到目标设备运行。
  4. 使用 file 命令可以验证生成程序的架构,使用 readelf -d 查看程序依赖。
  5. 系统运行库通常由目标 Debian 系统提供,无需打包;第三方库(如 PortAudio、CSerialPort)需要使用同一套工具链重新编译。
  6. 文件传输推荐使用 WinSCP 或 scp,相比 VMware 共享文件夹更加稳定可靠。

以上流程同样适用于大多数基于 GCC 交叉工具链的 ARM Linux 平台,例如 RK3568、RK3588、全志、瑞芯微等开发板。

相关推荐
hoaxxcj3 小时前
DeepSeek Harness 本地部署与第三方插件排障实录:从 fetch failed 到 preset not found
人工智能·windows·开源·ai agent·deepseek
志栋智能4 小时前
超自动化巡检如何生成“有灵魂”的运维报告?
大数据·运维·人工智能·架构·自动化
凌风的跨境分享4 小时前
Temu运营避坑指南:制造地点信息填写合规要点与批量优化方法
运维·服务器·人工智能
Splashtop高性能远程控制软件4 小时前
微软 2026 年 9 月补丁星期二技术分析:974 个漏洞的分级修复优先级清单
运维·安全·自动化·远程工作·splashtop
Elastic 中国社区官方博客5 小时前
将 Vercel 数据导入 Elastic:无需安装任何东西的无服务器可观测性
大数据·运维·elasticsearch·搜索引擎·云原生·serverless·全文检索
m0_634865405 小时前
2G2核服务器部署deep seekharness 困难?资源不够?DeepSeek Harness 部署复用笔记
运维·服务器·deepseek·harness
赵民勇5 小时前
systemd-sysusers命令详解
linux·运维
江湖人称菠萝包5 小时前
【Windows】《深入浅出Windows API程序设计:核心编程篇》笔记-Chapter11-PE文件格式深入剖析
windows·笔记
本人手速666+5 小时前
企业微信 API 接入层如何降低业务系统复杂度
运维·网络协议·微信·自动化·ipad
普通人65 小时前
win系统docker运行
windows·docker