【经验分享】Ubuntu20.04编译RK3568 AI模型报错问题(已解决)
- 前言
- 问题现象
- 问题分析
- 解决方案
- 总结
前言
这里使用的是Rockchip提供的rknn_model_zoo,https://github.com/airockchip/rknn_model_zoo/tree/main
此解决方案适用于Rockchip芯片在Ubuntu平台上编译报错问题。
问题现象
在使用如下命令编译生成开发板AI demo过程中出现报错
./build-linux.sh -t rk3568 -a aarch64 -d whisper
(p38) xingyun@ubuntu:~/software/rknn-toolkit/rknn_model_zoo$ ./build-linux.sh -t rk3568 -a aarch64 -d whisper
./build-linux.sh -t rk3568 -a aarch64 -d whisper
/home/xingyun/Downloads/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu
===================================
BUILD_DEMO_NAME=whisper
BUILD_DEMO_PATH=examples/whisper/cpp
TARGET_SOC=rk356x
TARGET_ARCH=aarch64
BUILD_TYPE=Release
ENABLE_ASAN=OFF
DISABLE_RGA=OFF
DISABLE_LIBJPEG=OFF
INSTALL_DIR=/home/xingyun/software/rknn-toolkit/rknn_model_zoo/install/rk356x_linux_aarch64/rknn_whisper_demo
BUILD_DIR=/home/xingyun/software/rknn-toolkit/rknn_model_zoo/build/build_rknn_whisper_demo_rk356x_linux_aarch64_Release
CC=/home/xingyun/Downloads/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
CXX=/home/xingyun/Downloads/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
===================================
-- 64bit
-- OpenCV_DIR=/home/xingyun/software/rknn-toolkit/rknn_model_zoo/examples/whisper/cpp/../../../3rdparty/opencv/opencv-linux-aarch64/share/OpenCV
-- OpenCV_LIBS=opencv_calib3dopencv_coreopencv_features2dopencv_imgcodecsopencv_imgprocopencv_video
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xingyun/software/rknn-toolkit/rknn_model_zoo/build/build_rknn_whisper_demo_rk356x_linux_aarch64_Release
[ 50%] Built target audioutils
[ 50%] Built target fileutils
[ 50%] Built target imagedrawing
[ 66%] Built target imageutils
[ 75%] Linking CXX executable rknn_whisper_demo
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: /home/xingyun/software/rknn-toolkit/rknn_model_zoo/3rdparty/libsndfile/Linux/aarch64/libsndfile.a(libsndfile_la-sndfile.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `stderr@@GLIBC_2.17' which may bind externally can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: /home/xingyun/software/rknn-toolkit/rknn_model_zoo/3rdparty/libsndfile/Linux/aarch64/libsndfile.a(libsndfile_la-sndfile.o)(.text+0x3b4): unresolvable R_AARCH64_ADR_PREL_PG_HI21 relocation against symbol `stderr@@GLIBC_2.17'
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/rknn_whisper_demo.dir/build.make:135: rknn_whisper_demo] Error 1
make[1]: *** [CMakeFiles/Makefile2:124: CMakeFiles/rknn_whisper_demo.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
问题分析
通过deepseek查询问题原因
deepseek要求我重新编译libsndfile.a
这里其实我被deepseek误导了,因为并不是只出现这一个第三方库文件异常的问题。所以不可能每一个都去重新编译一遍。
解决方案
重新看了下编译环境指导文档,终于找到了问题所在。其实很简单,就是编译工具链的版本不对,在ubuntu20.04直接安装的编译工具链和瑞芯微提供的编译工具链的版本号存在差异,导致编译异常。
所以正确做法就是使用瑞芯微Rockchip建议的交叉编译工具链版本
- 通过此链接下载NDK(建议下载r19c版本):https://dl.google.com/android/repository/android-ndk-r19c-linux-x86_64.zip
再重新编译,注意删除build路径,完美编译通过!
至此问题完美解决!
总结
通过本次解决方案的排查,可以看出DeepSeek并不能完全解决问题,它只能给出一些通用的建议,很有可能会把你带偏。最好还是把docs下的文档仔细看看,一般问题都能够解决。当然,DeepSeek对于我们开发者的帮助还是毋庸置疑的,我很欣赏一句话