当前位置: 首页 > news >正文

保姆级教程:在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
http://www.jsqmd.com/news/824716/

相关文章:

  • 别再只会用zip了!Ubuntu下tar.gz、tar.bz2压缩命令实战对比与选型指南
  • SystemVerilog与OVM在现代芯片验证中的核心价值与实践
  • Transformer模型推理加速:操作融合技术解析
  • 机器人抓取动力学追踪工具:从数据采集到可视化分析全流程解析
  • 别再只懂RAID了!用Minio纠删码搭建高可用存储,实测硬盘坏一半数据照样能读
  • MoneyPrinterTurbo终极指南:3分钟学会AI短视频自动生成,让创意变现从未如此简单![特殊字符]
  • BetaFlight飞控AOCODARC-F7MINI固件编译实战:从环境搭建到烧录验证
  • 2026.5.14-团队博客
  • 开源技能模块开发实战:基于OpenProject API的智能集成与自动化
  • CDN防护的薄弱环节:实战中寻找真实IP的多种思路
  • Maven组件化发布实战:从私服配置到版本管理全解析
  • BilibiliDown:跨平台B站视频下载解决方案完全指南
  • Taotoken平台OpenAI兼容API调用基础教程与Python示例
  • 开源容器镜像安全扫描器Quaid:从漏洞检测到CI/CD集成实战
  • 不止是记事本!Win10右键新建菜单终极自定义指南:排序、删除、添加任意文件类型
  • 别再只测SSRF读文件了!用BurpSuite+Redis打造你的内网横向移动跳板
  • 车载毫米波雷达超分辨DOA算法:从理论到工程落地的挑战与选型
  • 从零到一:uni push2.0全链路配置与实战推送指南
  • 告别‘丑’结构:用RDKit的ETKDG算法,5分钟搞定分子3D构象生成(附Python代码)
  • 从空调到手机充电器:拆解5个日常电器,看功率型NTC如何默默守护你的设备安全
  • AttentionEngine框架:模块化注意力机制的高效实现
  • Beyond Compare 5本地化激活终极指南:三步实现专业文件对比工具永久使用
  • Perplexity企业版真正杀手锏不是搜索——而是这4个未公开的Enterprise API扩展点(含内部文档截图级解析)
  • Kiboru开源平台:快速构建AI应用的模块化解决方案
  • 本地AI智能体框架Dragon-Brain:从原理到实战部署指南
  • 为什么明日方舟资源库是每个创作者必备的宝藏?3个真实案例告诉你答案
  • 当CRC32校验不再是黑盒:逆向、回滚与合并的数学魔法
  • Taotoken API密钥管理与访问控制功能使用体验
  • 从台球到机械臂:用Simscape Contact Forces Library玩转多体接触仿真
  • Taotoken API Key的精细化管理与审计日志功能实践