news 2026/5/15 23:31:58

保姆级教程:在Ubuntu 20.04上为RK3588交叉编译OpenCV 3.4.5(含离线安装CMake指南)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在Ubuntu 20.04上为RK3588交叉编译OpenCV 3.4.5(含离线安装CMake指南)

保姆级教程:在Ubuntu 20.04上为RK3588交叉编译OpenCV 3.4.5(含离线安装CMake指南)

RK3588作为新一代高性能嵌入式处理器,在边缘计算和计算机视觉领域展现出强大潜力。但对于刚接触嵌入式开发的工程师来说,如何在没有网络环境的开发板上部署OpenCV库往往成为第一个技术门槛。本文将手把手带您完成从工具链配置到最终部署的全流程,特别针对网络受限环境提供完整的离线解决方案。

1. 环境准备与工具链配置

1.1 开发主机环境检查

在开始交叉编译前,需要确保开发主机满足基本要求。推荐使用物理机或虚拟机安装Ubuntu 20.04 LTS系统,并检查以下组件:

# 检查系统版本 lsb_release -a # 检查基础编译工具 gcc --version g++ --version make --version

若缺少必要组件,可通过以下命令安装基础开发环境:

sudo apt update sudo apt install build-essential git wget unzip

1.2 交叉编译工具链获取

针对RK3588的ARMv8架构,我们需要aarch64架构的交叉编译工具链。推荐使用Arm官方提供的GCC工具链:

# 下载工具链(建议在可联网环境下载后传输到离线主机) wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz # 解压到/opt目录 sudo tar -xvf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz -C /opt

配置环境变量,在~/.bashrc末尾添加:

export PATH="/opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:$PATH" export CROSS_COMPILE=aarch64-none-linux-gnu-

执行source ~/.bashrc后验证工具链是否生效:

aarch64-none-linux-gnu-gcc --version

2. CMake离线安装方案

2.1 主机端CMake安装

对于Ubuntu 20.04,官方仓库中的CMake版本可能较旧,推荐通过Snap安装最新版:

sudo snap install cmake --classic

验证安装:

cmake --version # 应显示3.25或更高版本

2.2 目标板CMake离线部署

当开发板无法联网时,需要手动下载并安装CMake。以下是详细步骤:

  1. 在可联网设备下载aarch64版CMake:

    wget https://github.com/Kitware/CMake/releases/download/v3.25.1/cmake-3.25.1-linux-aarch64.tar.gz
  2. 将压缩包传输到开发板后解压:

    tar -xzvf cmake-3.25.1-linux-aarch64.tar.gz mv cmake-3.25.1-linux-aarch64 /opt/cmake
  3. 配置环境变量:

    echo 'export PATH="/opt/cmake/bin:$PATH"' >> ~/.bashrc source ~/.bashrc

注意:如果目标板使用不同架构,需下载对应版本的CMake。可通过uname -m查看架构信息。

3. OpenCV交叉编译实战

3.1 源码获取与准备

下载OpenCV 3.4.5源码包和对应的contrib模块:

wget -O opencv-3.4.5.zip https://github.com/opencv/opencv/archive/3.4.5.zip wget -O opencv_contrib-3.4.5.zip https://github.com/opencv/opencv_contrib/archive/3.4.5.zip

解压源码并创建构建目录:

unzip opencv-3.4.5.zip unzip opencv_contrib-3.4.5.zip mkdir -p opencv-3.4.5/build mkdir opencv-3.4.5/install

3.2 交叉编译配置

创建toolchain.cmake文件指定交叉编译参数:

# toolchain.cmake set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) set(CMAKE_C_COMPILER aarch64-none-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-none-linux-gnu-g++) set(CMAKE_FIND_ROOT_PATH /opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

执行CMake配置:

cd opencv-3.4.5/build cmake \ -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake \ -DCMAKE_INSTALL_PREFIX=../install \ -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.5/modules \ -DBUILD_opencv_world=ON \ -DBUILD_TESTS=OFF \ -DBUILD_EXAMPLES=OFF \ -DCMAKE_BUILD_TYPE=Release \ ..

3.3 常见编译问题解决

问题1:zlib.h缺失错误

解决方案是强制使用OpenCV内置的zlib:

# 在源码目录中全局替换zlib.h引用 find . -type f -name "*.h" -exec sed -i 's/#include [<"]zlib.h[>"]/#include "..\/..\/3rdparty\/zlib\/zlib.h"/g' {} +

问题2:ipcp-unit-growth参数错误

修改3rdparty/carotene/hal/carotene/CMakeFiles/carotene_objs.dir目录下的build.make和flags.make文件,将所有ipcp-unit-growth替换为ipa-cp-unit-growth。

3.4 编译与安装

make -j$(nproc) make install

编译完成后,install目录将包含所有需要的文件:

install/ ├── bin ├── include ├── lib └── share

4. 部署与验证

4.1 文件打包与传输

将编译结果打包以便传输到目标板:

tar -czvf opencv-3.4.5-arm64.tar.gz -C opencv-3.4.5/install .

通过U盘或SCP将压缩包传输到开发板,然后解压:

tar -xzvf opencv-3.4.5-arm64.tar.gz -C /usr/local

4.2 环境配置

在开发板上配置动态链接库路径:

echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/opencv.conf sudo ldconfig

验证库是否被正确识别:

ldconfig -p | grep opencv

4.3 测试用例运行

创建一个简单的CMake项目测试OpenCV功能:

# CMakeLists.txt cmake_minimum_required(VERSION 3.10) project(OpenCVTest) find_package(OpenCV REQUIRED) add_executable(test_opencv test.cpp) target_link_libraries(test_opencv ${OpenCV_LIBS})

编译并运行测试程序:

cmake . make ./test_opencv

5. 性能优化建议

5.1 编译参数调优

针对RK3588的Cortex-A76/A55架构,可添加以下编译选项提升性能:

-DENABLE_NEON=ON -DENABLE_VFPV3=ON -DCPU_BASELINE='NEON' -DCMAKE_CXX_FLAGS="-O3 -mcpu=cortex-a76.cortex-a55"

5.2 选择性模块编译

根据实际需求禁用不必要的模块以减小库体积:

-DBUILD_opencv_dnn=OFF -DBUILD_opencv_ml=OFF -DWITH_GTK=OFF

5.3 内存优化配置

对于资源受限的嵌入式环境,可调整以下参数:

-DENABLE_PRECOMPILED_HEADERS=OFF -DBUILD_SHARED_LIBS=ON -DBUILD_WITH_STATIC_CRT=OFF

6. 进阶技巧与维护

6.1 版本管理方案

建议采用符号链接管理多版本OpenCV:

sudo ln -s /usr/local/opencv-3.4.5 /usr/local/opencv

6.2 自动化编译脚本

创建一键编译脚本简化流程:

#!/bin/bash # build_opencv.sh mkdir -p build && cd build cmake .. ${YOUR_CMAKE_FLAGS} make -j$(nproc)

6.3 容器化编译环境

使用Docker创建可复用的编译环境:

FROM ubuntu:20.04 RUN apt update && apt install -y build-essential cmake git COPY toolchain.cmake /opt/ WORKDIR /workspace
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 23:25:24

低比特DNN推理中的LUT优化技术与DRAM-PIM实践

1. 低比特DNN推理的挑战与LUT机遇在深度神经网络(DNN)推理加速领域&#xff0c;低比特量化技术正成为突破算力瓶颈的关键路径。传统DNN推理面临的核心矛盾在于&#xff1a;随着模型复杂度提升&#xff0c;算术逻辑单元(ALU)的资源消耗呈指数级增长&#xff0c;而内存带宽却难以…

作者头像 李华
网站建设 2026/5/15 23:25:24

教育机构构建 AI 助教平台时如何借助 Taotoken 控制成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 教育机构构建 AI 助教平台时如何借助 Taotoken 控制成本 在构建面向师生的 AI 助教平台时&#xff0c;教育机构面临的核心挑战之一…

作者头像 李华