瑞芯微RK1808编译rknn_demo

本文介绍在Ubuntu16.04下编译官方sdk里的rknn_demo的操作步骤。官方rknn_demo不能直接编译,缺少动态链接库和头文件。通过从rk1808开发板拷贝动态库,设置动态软连接并改动CMakeLists.txt文件来解决问题,相关文件可在资源文件下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作步骤在ubuntu16.04下编译。

官方给的sdk里的rknn_demo不能直接编译。缺少一些动态链接库,还需要完善一些CMakeLists.txt内容。首先在rknn_demo下新建一个build。进入 build文件夹下。执行指令cmake .. 然后在执行指令make。会发现提示缺少动态库和一些头文件。好吧下面我们来解决这些问题。因为rk1808里的rknn_demo可执行文件可以使用。所以我把rk1808里的动态库从开发板里拷贝出来了。我是把usber/lib下的动态库都拷贝出来了(通过adb pull命令可以拷贝出来。具体方法谷歌百度)。

红圈是所缺少的头文件和动态库。CMakeLists.txt所连接的库包含一些软连接。在rk1808系统板子里执行命令ls -l查看所指向的源文件。在ubunut以同样的方式设置动态的软连接。同时需要改动下CMakeLists.txt文件。我会把lost_h和lost_lib和CMakeLists.txt直接上传在我的资源文件里,直接下载使用即可。

 

<think>我们正在处理一个系统级错误:运行RKNN YOLOv5示例时出现的GLIBC_2.38未找到错误。这个错误通常是因为程序是在一个较新的系统(具有GLIBC 2.38)上编译的,而我们在一个较旧系统(GLIBC版本低于2.38)上运行它。 解决方案思路: 1. 检查当前系统的GLIBC版本:使用命令 `ldd --version` 查看当前系统的GLIBC版本。 2. 如果当前系统的GLIBC版本低于2.38,则无法直接运行该程序。我们有几种方法: a. 升级整个系统的GLIBC:但这是危险的,因为GLIBC是核心库,升级可能导致系统不稳定。 b. 在容器中运行(如Docker):使用一个包含GLIBC 2.38的容器来运行程序。 c. 从源代码重新编译程序:在本地系统上重新编译程序,使其链接到当前系统的GLIBC版本。 d. 使用patchelf工具修改程序的解释器和库路径,指向一个包含所需GLIBC版本的环境(例如,通过conda或手动编译的GLIBC环境)。但这种方法复杂且容易出错。 考虑到安全性和可行性,推荐使用容器方法(Docker)或重新编译程序。 由于RKNN YOLOv5示例程序可能依赖于Rockchip的RKNN Toolkit,我们需要确保在重新编译或容器化时能够满足其依赖。 具体步骤: 方法1:使用Docker容器(推荐) 1. 创建一个Dockerfile,基于一个包含GLIBC 2.38的镜像(例如ubuntu:23.04或更高版本,因为ubuntu23.04默认使用glibc 2.37,而23.10则使用2.38)。 2. 在Dockerfile中安装RKNN Toolkit和程序所需的其他依赖。 3. 构建镜像并运行容器,在容器内执行程序。 方法2:重新编译程序 1. 获取rknn_yolov5_video_demo的源代码。 2. 在本地系统上安装RKNN Toolkit(确保版本兼容)。 3. 尝试在本地系统上重新编译程序,这样编译出的程序将链接到当前系统的GLIBC。 但是,重新编译可能不是总是可行,因为Rockchip可能没有提供完整的源代码,或者程序是预编译的二进制文件。 因此,如果程序是预编译的二进制文件,我们只能选择: - 使用容器(方法1) - 或者,在系统中安装一个较新的GLIBC(不推荐,除非在隔离环境中) 另外,还可以尝试使用patchelf工具修改二进制文件的动态链接库路径,将其指向一个包含GLIBC 2.38的环境(例如,通过conda安装一个高版本的glibc,然后修改二进制文件的rpath和解释器)。但这种方法需要谨慎操作。 步骤(使用patchelf): 1. 安装conda环境,并在其中安装高版本的glibc(例如,使用conda install -c conda-forge glibc=2.38)。 2. 使用patchelf修改二进制文件: patchelf --set-interpreter [conda环境路径]/lib/ld-linux-x86-64.so.2 --set-rpath [conda环境路径]/lib [二进制文件路径] 3. 然后运行二进制文件时,确保conda环境已激活。 但是,由于GLIBC是核心库,即使使用conda环境,也可能存在其他兼容性问题。因此,容器方法可能更安全。 根据用户的问题,我们假设用户运行的是预编译的二进制文件(rknn_yolov5_video_demo),所以重新编译可能不可行。因此,我们重点介绍容器方法和patchelf方法。 详细步骤: 方法1:使用Docker容器 1. 安装Docker(如果尚未安装)。 2. 编写Dockerfile,例如: ``` # 使用一个包含GLIBC 2.38的基础镜像 FROM ubuntu:23.10 # 安装依赖 RUN apt-get update && apt-get install -y python3 python3-pip # 安装rknn-toolkit2(注意:需要根据Rockchip提供的版本进行安装,可能需要下载whl文件) COPY rknn_toolkit2-*.whl /tmp/ RUN pip3 install /tmp/rknn_toolkit2-*.whl # 将程序和相关文件复制到容器中 COPY rknn_yolov5_video_demo /app/ COPY your_model.rknn /app/ COPY your_video.mp4 /app/ WORKDIR /app CMD ["./rknn_yolov5_video_demo", "your_model.rknn", "your_video.mp4"] ``` 3. 构建镜像:`docker build -t rknn-demo .` 4. 运行容器:`docker run -it --rm --device /dev/dri:/dev/dri rknn-demo` (注意:如果需要GPU加速,可能需要添加更多设备映射和权限,RKNN通常使用NPU,具体设备映射请参考Rockchip文档) 方法2:使用patchelf和conda环境(高级方法) 1. 安装miniconda。 2. 创建一个conda环境并安装glibc 2.38(如果conda-forge有提供): ``` conda create -n rknn_env conda activate rknn_env conda install -c conda-forge glibc=2.38 ``` 3. 使用patchelf修改二进制文件(确保patchelf已安装): ``` patchelf --set-interpreter $CONDA_PREFIX/lib/ld-linux-x86-64.so.2 --set-rpath $CONDA_PREFIX/lib ./rknn_yolov5_video_demo ``` 4. 尝试运行:`./rknn_yolov5_video_demo model.rknn video.mp4` 注意:conda-forge可能不直接提供glibc 2.38,我们可以尝试安装其他包含高版本glibc的包,或者从源代码编译glibc并安装在conda环境中。但这种方法比较复杂,且conda-forge的glibc包可能更新不及时。 因此,如果方法2中conda-forge没有glibc 2.38,我们可以考虑手动编译glibc并设置环境,但这样步骤较多。 鉴于以上情况,我们优先推荐Docker容器方法。 如果用户不想使用容器,我们可以尝试在旧系统上运行新GLIBC程序的方法:使用glibc的兼容性方案。但这种方法需要手动下载GLIBC 2.38的源代码编译到非系统目录(例如/opt/glibc-2.38),然后使用一个包装脚本来设置LD_LIBRARY_PATH和程序解释器。但同样复杂且容易出错。 总结:最安全且简单的方法是使用Docker容器。 现在,我们为用户提供详细的Docker解决方案步骤,并假设用户已经安装了Docker。 步骤详解(Docker方法): 1. 确保Docker已安装:运行 `docker --version` 检查。 2. 创建一个工作目录,将所需的文件放入其中:包括rknn_yolov5_video_demo二进制文件、模型文件(.rknn)、测试视频文件,以及RKNN Toolkit的wheel文件(如果Rockchip提供了,可能需要从官网下载)。 3. 编写Dockerfile(如上示例)。 4. 构建镜像。 5. 运行容器。 注意:如果程序需要访问摄像头或其他设备,需要添加相应的设备映射参数(如--device /dev/video0)。如果使用Rockchip NPU,可能需要映射设备节点(例如--device /dev/bus/usb,因为NPU可能通过USB连接,或者根据具体硬件而定)。具体设备节点需要查看Rockchip的文档。 另外,如果用户使用的是Rockchip的开发板(如RK3588),那么程序可能直接运行在开发板上,而开发板上的系统通常是定制的Linux(如Debian或Ubuntu)。在这种情况下,用户应该升级开发板上的系统以获取更高版本的GLIBC,或者向供应商索取一个兼容的二进制文件。 但是,如果用户是在x86主机上运行模拟或测试,那么使用Docker容器是可行的。 因此,我们需要根据用户的实际环境来调整方案。如果用户是在开发板上运行,那么升级开发板的系统可能是最直接的方法(如果供应商提供了升级包)。 综上所述,我们提供两种主要方案: - 在开发板环境:尝试升级系统或获取兼容的二进制文件。 - 在x86主机环境:使用Docker容器。 由于用户的问题中没有明确环境,我们将提供适用于x86主机的Docker方案,并提及开发板环境的解决方案。 最后,生成相关问题。</think>### 解决 RKNN YOLOv5 示例的 GLIBC_2.38 未找到错误 #### 错误原因分析 当运行 `rknn_yolov5_video_demo` 时出现 `GLIBC_2.38 not found` 错误,说明该程序是在较新的 Linux 系统(GLIBC ≥ 2.38)上编译的,而您的当前系统 GLIBC 版本较低(可通过 `ldd --version` 确认)。GLIBC 是 Linux 的核心库,直接升级系统版本存在风险[^1]。 --- #### 推荐解决方案(按优先级排序) ##### ✅ 方案1:使用 Docker 容器(最安全) ```bash # 创建包含高版本 GLIBC 的容器环境 docker run -it --rm \ --device=/dev/dri \ # 映射显卡设备(如使用GPU加速) -v $(pwd):/app \ # 挂载当前目录 ubuntu:23.10 \ # 使用自带 GLIBC 2.38 的系统 /bin/bash -c "apt update && apt install -y libgl1 && cd /app && ./rknn_yolov5_video_demo" ``` **优点**: - 完全隔离环境,不影响主机系统 - 支持硬件加速映射(`--device` 参数) - 无需重新编译程序 ##### ✅ 方案2:从源码重新编译 RKNN 示例 1. 安装 RKNN Toolkit2 开发环境: ```bash pip3 install rknn_toolkit2 ``` 2. 获取源码(通常位于 RKNN Toolkit2 安装目录): ```bash find / -name rknn_yolov5_video_demo.cpp 2>/dev/null ``` 3. 在本地系统重新编译: ```bash g++ rknn_yolov5_video_demo.cpp -I /path/to/rknn/include \ -L /path/to/rknn/lib -lrknnrt -lopencv_core -lopencv_videoio \ -o rknn_yolov5_video_demo ``` **注意**:需确保 OpenCV 和 RKNN 库已正确安装。 ##### ⚠️ 方案3:GLIBC 补丁替换(风险较高) ```bash # 下载高版本 GLIBC 库(需匹配架构) wget http://ftp.debian.org/debian/pool/main/g/glibc/libc6_2.38-1_amd64.deb # 解压到独立目录 mkdir glibc_2.38 && dpkg -x libc6_2.38-1_amd64.deb glibc_2.38 # 使用 patchelf 修改程序依赖路径 patchelf --set-interpreter glibc_2.38/lib/x86_64-linux-gnu/ld-2.38.so \ --set-rpath glibc_2.38/lib/x86_64-linux-gnu \ rknn_yolov5_video_demo # 运行(需指定库路径) LD_LIBRARY_PATH=glibc_2.38/lib/x86_64-linux-gnu ./rknn_yolov5_video_demo ``` **风险提示**: - 可能导致程序不稳定 - 需严格匹配 CPU 架构(ARM/x86) - 不推荐用于生产环境 --- #### 验证步骤 成功解决后,使用以下命令确认: ```bash # 检查 GLIBC 依赖 objdump -T rknn_yolov5_video_demo | grep GLIBC # 验证运行 ./rknn_yolov5_video_demo your_model.rknn input_video.mp4 ``` #### 附加建议 - 对于 Rockchip 开发板(如 RK3588),优先使用 **官方提供的 SDK** 重新编译 - 若使用预编译模型,确保模型与 RKNN Toolkit 版本兼容 - 完整错误日志可通过 `strace ./rknn_yolov5_video_demo` 获取更多诊断信息 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值