Openwrt 平台下移植rk3568 rknn_yolov5_demo 应用程序问题分析
背景
rk3568 官方SDK是基于buildroot, 为了支持更丰富的网络应用和网管系统,基于buildroot的内核移植了Openwrt的Rootfs, 起初还担心会存在大量的兼容性问题。但是实际应用之后 ,解决了一几个内核和文件系统一致性问题之后 ,系统基本上可以稳定运行了。当然 这也跟使用的应用类型有关。
rk3568集成了NPU,有一定的AI算力,在自己定制的rk3568 + openwrt平台运行 yolov5 demo程序时出现了链接库兼容性问题。本文将主要围绕如何解决这个问题展开讨论。
现象
在rk3568平台上运行rknn_yolov5_demo时,出现以下错误:
。./rknn_yolov5_demo
-bash: ./rknn_yolov5_demo: cannot execute: required file not found#查看 rknn_yolov5_demo 格式
rknn_yolov5_demo: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=0696cb60a161fc74d79144fd233a31d86f1c1ba0, with debug_info, not stripped# 查看rknn_yolov5_demo 依赖的动态库ldd rknn_yolov5_demo /lib/ld-linux-aarch64.so.1 (0x7f868f0000)librknnrt.so => lib/librknnrt.so (0x7f865ef000)librga.so.2 => lib/librga.so.2 (0x7f865c9000)libdl.so.2 => /lib/ld-linux-aarch64.so.1 (0x7f868f0000)libpthread.so.0 => /lib/ld-linux-aarch64.so.1 (0x7f868f0000)librt.so.1 => /lib/ld-linux-aarch64.so.1 (0x7f868f0000)libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x7f86397000)libm.so.6 => /lib/ld-linux-aarch64.so.1 (0x7f868f0000)libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x7f86372000)libc.so.6 => /lib/ld-linux-aarch64.so.1 (0x7f868f0000)libdrm.so.2 => /usr/lib/libdrm.so.2 (0x7f8634e000)
Error relocating lib/librknnrt.so: __strdup: symbol not found
Error relocating lib/librknnrt.so: __log2_finite: symbol not found
Error relocating lib/librknnrt.so: __pow_finite: symbol not found
Error relocating lib/librknnrt.so: __log2f_finite: symbol not found
Error relocating lib/librknnrt.so: __exp_finite: symbol not found
Error relocating lib/librknnrt.so: __powf_finite: symbol not found
Error relocating li