保姆级教程:在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 unzip1.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_COMPILEaarch64-none-linux-gnu-执行source ~/.bashrc后验证工具链是否生效aarch64-none-linux-gnu-gcc --version2. CMake离线安装方案2.1 主机端CMake安装对于Ubuntu 20.04官方仓库中的CMake版本可能较旧推荐通过Snap安装最新版sudo snap install cmake --classic验证安装cmake --version # 应显示3.25或更高版本2.2 目标板CMake离线部署当开发板无法联网时需要手动下载并安装CMake。以下是详细步骤在可联网设备下载aarch64版CMakewget https://github.com/Kitware/CMake/releases/download/v3.25.1/cmake-3.25.1-linux-aarch64.tar.gz将压缩包传输到开发板后解压tar -xzvf cmake-3.25.1-linux-aarch64.tar.gz mv cmake-3.25.1-linux-aarch64 /opt/cmake配置环境变量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/install3.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_worldON \ -DBUILD_TESTSOFF \ -DBUILD_EXAMPLESOFF \ -DCMAKE_BUILD_TYPERelease \ ..3.3 常见编译问题解决问题1zlib.h缺失错误解决方案是强制使用OpenCV内置的zlib# 在源码目录中全局替换zlib.h引用 find . -type f -name *.h -exec sed -i s/#include []zlib.h[]/#include ..\/..\/3rdparty\/zlib\/zlib.h/g {} 问题2ipcp-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 └── share4. 部署与验证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/local4.2 环境配置在开发板上配置动态链接库路径echo /usr/local/lib | sudo tee /etc/ld.so.conf.d/opencv.conf sudo ldconfig验证库是否被正确识别ldconfig -p | grep opencv4.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_opencv5. 性能优化建议5.1 编译参数调优针对RK3588的Cortex-A76/A55架构可添加以下编译选项提升性能-DENABLE_NEONON -DENABLE_VFPV3ON -DCPU_BASELINENEON -DCMAKE_CXX_FLAGS-O3 -mcpucortex-a76.cortex-a555.2 选择性模块编译根据实际需求禁用不必要的模块以减小库体积-DBUILD_opencv_dnnOFF -DBUILD_opencv_mlOFF -DWITH_GTKOFF5.3 内存优化配置对于资源受限的嵌入式环境可调整以下参数-DENABLE_PRECOMPILED_HEADERSOFF -DBUILD_SHARED_LIBSON -DBUILD_WITH_STATIC_CRTOFF6. 进阶技巧与维护6.1 版本管理方案建议采用符号链接管理多版本OpenCVsudo ln -s /usr/local/opencv-3.4.5 /usr/local/opencv6.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

相关新闻

最新新闻

日新闻

周新闻

月新闻