在嵌入式AI开发中,将Deepseek大模型部署到RK3588(瑞芯微高性能SoC)是实现边缘端智能应用的关键需求。但很多开发者会卡在编译配置、依赖冲突等环节。本文基于实际操作流程,详细讲解直接在RK3588板子上编译Deepseek可执行程序的完整步骤,包含CMake配置、代码上传、常见报错解决,帮你避开所有“坑”。
本文将围绕以下4部分展开:
1.部署前必备准备(硬件/软件/工具)
2.核心配置:CMakeLists.txt解析与修改
3.分步操作:代码上传→编译→报错解决
4.编译成功验证与总结
一、部署前准备:确认这些“必需品”
在开始操作前,先确保你的环境满足以下条件,避免后续反复返工:
| 类型
|
具体要求
|
| 硬件
|
RK3588开发板(已刷入Linux系统,如Linaro-Alip),确保有SSH连接或串口访问权限
|
| 软件源码
|
Deepseek部署可执行程序源码包(含main.cc、CMakeLists.txt、lib库目录)
|
| 依赖库
|
内置librkllmrt.so(RKLLM推理库)、libgomp.so(OpenMP支持库)
|
| 编译工具
|
板子自带aarch64-linux-gnu-gcc/g++(需确认路径与版本,本文用GNU 10.2.1)
|
先通过以下命令验证系统编译工具是否可用(若有输出则正常):
# 查看GCC版本gcc --version# 查看G++版本g++ --version# 确认工具链路径(本文默认路径为/usr/bin/)whichaarch64-linux-gnu-gcc
二、核心配置:修改CMakeLists.txt
CMakeLists.txt是编译的“指挥文件”,需根据RK3588环境调整工具链路径、依赖库引用与安装配置。以下是完整配置代码及关键参数解析:
# 1. 最低CMake版本要求(需≥3.8,避免语法不兼容)cmake_minimum_required(VERSION 3.8)# 2. 项目名称(自定义,建议含硬件标识)project(xsc_deepseek_rkllm_demo)# 3. C++标准配置(固定C++11,适配多数嵌入式环境)set(CMAKE_CXX_STANDARD 11)set(CMAKE_CXX_STANDARD_REQUIRED ON)# 4. 工具链路径配置(关键!需与RK3588实际路径匹配)set(TOOLCHAIN_DIR /usr) # 工具链根目录set(CMAKE_CXX_COMPILER${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-g++) # C++编译器set(CMAKE_C_COMPILER${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-gcc) # C编译器# 5. 源码目录与头文件路径(指定Deepseek源码根目录,引入RKLLM头文件)set(CMAKE_SOURCE_DIR /data/xsc_deepseek)include_directories(${CMAKE_SOURCE_DIR}/lib/librkllm_api/include/)# 6. 依赖库配置(链接RKLLM推理库与OpenMP库)set(RKLLM_RT_LIB${CMAKE_SOURCE_DIR}/lib/librkllm_api/librkllmrt.so) # RKLLM核心库set(GOMP_LIB${CMAKE_SOURCE_DIR}/lib/libgomp/libgomp.so) # OpenMP并行库# 7. 生成可执行程序(指定源码文件main.cc,输出程序名xsc_deepseek_demo)add_executable(xsc_deepseek_demo main.cc)# 8. 链接依赖库(将程序与RKLLM、OpenMP库关联,缺一不可)target_link_libraries(xsc_deepseek_demo${RKLLM_RT_LIB}${GOMP_LIB})# 9. 安装配置(指定编译产物的输出目录,方便后续调用)set(CMAKE_INSTALL_PREFIX${CMAKE_SOURCE_DIR}/install/xsc_deepseek_rkllm_demo)install(TARGETS xsc_deepseek_demo DESTINATION ./) # 安装可执行程序install(DIRECTORY rkllm_model DESTINATION ./) # 安装模型文件夹
关键提醒:若你的工具链路径、源码目录与本文不同,需同步修改第4、5、6、9行的路径参数,这是后续编译成功的基础!
三、分步操作:从代码上传到编译排错
这部分是实操核心,我们按“上传→编译→解决报错”的顺序逐步推进,所有命令均来自实际RK3588终端操作。
步骤1:将代码上传到RK3588的/data路径
先通过SSH或U盘将Deepseek源码压缩包(xsc_deepseek.zip)传到RK3588的/data目录,然后执行解压命令,查看目录结构是否完整:
|
正常情况下,ls会输出以下文件/目录(确认无缺失):
build-linux.sh CMakeLists.txt lib main.cc rkllm_model
其中:
•lib/:存放librkllmrt.so和libgomp.so依赖库
•rkllm_model/:Deepseek模型文件目录
•build-linux.sh:编译脚本
•main.cc:核心业务代码
步骤2:执行编译脚本,解决3类常见报错
直接运行编译脚本可能会遇到权限、时间戳、依赖库3类问题,我们逐个解决:
报错1:“bash: ./build-linux.sh:权限不够”
原因:编译脚本没有可执行权限
解决命令:给脚本赋最高权限(777表示读/写/执行权限全开)
chmod777 ./build-linux.sh# 重新执行编译脚本./build-linux.sh
报错2:“警告:文件"../../main.cc"的修改时间在未来14665332秒后”
原因:RK3588系统时间与文件修改时间不匹配(可能是板子断网后时间错乱)
解决命令:手动同步系统时间(本文示例时间为2025年09月02日18:28,可根据实际修改)
# 设置系统时间(格式:年-月-日 时秒)date-s"20250902 1800"# 重新执行编译脚本./build-linux.sh
报错3:“undefined reference to pthread_getaffinity_np@GLIBC_2.32”
原因:自带的libgomp.so版本与RK3588的GLIBC(2.32版本)不兼容
解决步骤:
1.先找到系统中兼容的libgomp.so路径(RK3588默认在/usr/lib/gcc/aarch64-linux-gnu/10/)
2.替换源码目录中旧的libgomp.so
具体命令:
# 1. 查找系统中所有libgomp.so路径find .././ -name libgomp.so# 输出会包含:../../usr/lib/gcc/aarch64-linux-gnu/10/libgomp.so(这是兼容版本)# 2. 替换源码lib目录下的旧库(覆盖两个路径,确保编译时引用正确)cp../../usr/lib/gcc/aarch64-linux-gnu/10/libgomp.so ../../usr/lib/libgomp/libgomp.socp../../usr/lib/gcc/aarch64-linux-gnu/10/libgomp.so ../../userdata/xsc_deepseek/lib/libgomp/libgomp.so# 3. 再次执行编译脚本,此时无报错./build-linux.sh
步骤3:确认编译成功
当终端输出以下信息时,说明编译与安装完成:
--Configuringdone--Generatingdone--Buildfiles have been written to:/userdata/xsc_deepseek/build/build_linux_aarch64[50%]LinkingCXXexecutable xsc_deepseek_demo[100%]Builttarget xsc_deepseek_demoInstallthe project...--Installconfiguration:""--Installing:/data/xsc_deepseek/install/xsc_deepseek_rkllm_demo/./xsc_deepseek_demo--Setruntime path of"/data/xsc_deepseek/install/xsc_deepseek_rkllm_demo/./xsc_deepseek_demo"to""--Installing:/data/xsc_deepseek/install/xsc_deepseek_rkllm_demo/./rkllm_model
可通过以下命令验证产物:
# 进入安装目录cd/data/xsc_deepseek/install/xsc_deepseek_rkllm_demo# 查看文件(应包含可执行程序和模型目录)ls输出如下即正常:xsc_deepseek_demo rkllm_model
四、总结:部署关键要点与后续建议
本次在RK3588上部署Deepseek的核心是“本地编译+依赖适配”,总结3个关键注意点,帮你避免重复踩坑:
1.CMake配置是基础:工具链路径、头文件目录、依赖库必须与RK3588实际环境匹配,尤其是TOOLCHAIN_DIR和RKLLM_RT_LIB的路径不能错;
2.报错解决有规律:权限问题用chmod,时间问题用date -s,依赖库问题用“查找系统兼容库+替换”的思路;
3.验证步骤不能少:编译后一定要到install目录确认可执行程序和模型目录是否存在,为后续运行模型做好准备。
如果后续需要运行Deepseek模型,只需在安装目录执行./xsc_deepseek_demo即可(需确保模型配置正确)。若你在操作中遇到其他问题,欢迎在评论区留言讨论!