首页 自动驾驶

RK3588开发环境搭建:Ubuntu20.04、CMake3.22与OpenCV4.54保姆级教程

分类:自动驾驶
字数: (2802)
阅读: (9811)
内容摘要:RK3588开发环境搭建:Ubuntu20.04、CMake3.22与OpenCV4.54保姆级教程,

在嵌入式开发领域,RK3588 凭借其强大的性能和丰富的接口,成为了许多项目的不二之选。然而,搭建一个稳定且高效的开发环境,尤其是涉及 OpenCV 这种重量级库时,往往会遇到各种问题。本文将以 Ubuntu 20.04 为例,详细介绍如何在 RK3588 上配置 CMake 3.22 和 OpenCV 4.5.4,并分享一些实战中的避坑经验。

问题场景重现:编译报错与依赖缺失

在进行 OpenCV 项目编译时,开发者经常会遇到以下问题:

  • CMake 版本过低,无法识别新的 OpenCV 特性。
  • OpenCV 依赖库缺失,导致编译链接错误,例如 undefined reference to cv::imread
  • 交叉编译工具链配置不正确,编译出来的程序无法在 RK3588 上运行。
  • 内存不足,导致编译过程中断。

这些问题往往让人焦头烂额,浪费大量时间在环境配置上,而不是专注于核心业务逻辑的开发。

底层原理深度剖析:CMake 与 OpenCV 的依赖关系

要解决上述问题,首先需要理解 CMake 和 OpenCV 之间的依赖关系。CMake 是一个跨平台的构建系统,它可以根据 CMakeLists.txt 文件生成 Makefile,从而实现项目的编译和链接。OpenCV 则是一个强大的计算机视觉库,它依赖于许多其他的库,例如:

RK3588开发环境搭建:Ubuntu20.04、CMake3.22与OpenCV4.54保姆级教程
  • libjpeg: 用于处理 JPEG 图像。
  • libpng: 用于处理 PNG 图像。
  • libtiff: 用于处理 TIFF 图像。
  • gstreamer: 用于处理视频流。
  • gtk: 用于提供 GUI 支持。

在配置环境时,必须确保这些依赖库都已经正确安装,并且 CMake 能够找到它们。此外,还需要注意交叉编译工具链的配置,以确保编译出来的程序能够在 RK3588 上运行。类似于部署 Nginx 服务时,需要考虑反向代理、负载均衡、并发连接数等因素,开发环境的配置也需要考虑各种依赖项。

具体的代码/配置解决方案

以下是在 RK3588 平台上配置 Ubuntu 20.04、CMake 3.22 和 OpenCV 4.5.4 的详细步骤:

1. 安装 Ubuntu 20.04

首先,需要在 RK3588 上安装 Ubuntu 20.04。可以从 Ubuntu 官网下载镜像,并使用烧录工具将其烧录到 SD 卡或 eMMC 中。

RK3588开发环境搭建:Ubuntu20.04、CMake3.22与OpenCV4.54保姆级教程

2. 安装 CMake 3.22

Ubuntu 20.04 默认的 CMake 版本可能较低,需要手动安装 CMake 3.22。

wget https://cmake.org/files/v3.22/cmake-3.22.0.tar.gz  # 下载 CMake 3.22 源码
tar -zxvf cmake-3.22.0.tar.gz  # 解压
cd cmake-3.22.0
./bootstrap  # 编译前的准备工作
make  # 编译
sudo make install  # 安装
cmake --version  # 检查 CMake 版本

3. 安装 OpenCV 4.5.4

有两种方法安装 OpenCV 4.5.4:

方法一:使用 apt 包管理器安装

RK3588开发环境搭建:Ubuntu20.04、CMake3.22与OpenCV4.54保姆级教程
sudo apt update
sudo apt install libopencv-dev python3-opencv # 安装 OpenCV 及其 Python 绑定
pkg-config --modversion opencv4 # 查看 OpenCV 版本

方法二:从源码编译安装

wget https://github.com/opencv/opencv/archive/4.5.4.zip # 下载 OpenCV 4.5.4 源码
unzip 4.5.4.zip
cd opencv-4.5.4
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D WITH_CUDA=OFF \
      -D BUILD_EXAMPLES=OFF .. # 配置编译选项
make -j$(nproc) # 编译,使用所有 CPU 核心加速
sudo make install # 安装
sudo ldconfig # 更新动态链接库缓存

注意: 如果选择从源码编译安装,需要提前安装 OpenCV 的依赖库:

sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff5-dev libjasper-dev libpng-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgtk-3-dev libtbb2 libtbb-dev libdc1394-22-dev

4. 配置 CMakeLists.txt

CMakeLists.txt 文件中,需要指定 OpenCV 的路径:

RK3588开发环境搭建:Ubuntu20.04、CMake3.22与OpenCV4.54保姆级教程
cmake_minimum_required(VERSION 3.10)
project(YourProject)

find_package(OpenCV REQUIRED)

include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(YourProject main.cpp)
target_link_libraries(YourProject ${OpenCV_LIBS})

5. 交叉编译配置 (如果需要)

如果需要在宿主机上交叉编译 RK3588 上的程序,需要配置交叉编译工具链。首先,需要下载 RK3588 的交叉编译工具链,并将其添加到环境变量中。

例如,假设工具链位于 /opt/rk3588/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin,则需要在 ~/.bashrc 文件中添加以下内容:

export PATH=$PATH:/opt/rk3588/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-

然后,在 CMakeLists.txt 文件中指定交叉编译工具链:

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
set(CMAKE_FIND_ROOT_PATH /opt/rk3588/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/sysroot)
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 和 OpenCV 版本,可以获得更好的性能和更多的功能。
  • 依赖管理: 使用 apt 包管理器安装 OpenCV 的依赖库,可以避免手动安装的麻烦。
  • 编译选项: 根据实际需求配置 OpenCV 的编译选项,例如是否启用 CUDA、是否编译示例程序等。
  • 交叉编译: 在配置交叉编译工具链时,需要确保环境变量设置正确,并且 CMakeLists.txt 文件中的路径也正确。
  • 内存优化: 在编译大型项目时,可以增加 swap 分区的大小,或者使用 -j 参数指定较少的 CPU 核心数,以避免内存不足的问题。类似于宝塔面板优化 Nginx,配置合理的缓存策略和连接数限制也至关重要。

总结

本文详细介绍了如何在 RK3588 上配置 Ubuntu 20.04、CMake 3.22 和 OpenCV 4.5.4,并分享了一些实战中的避坑经验。希望能够帮助开发者快速搭建一个稳定且高效的开发环境,从而专注于核心业务逻辑的开发。

RK3588开发环境搭建:Ubuntu20.04、CMake3.22与OpenCV4.54保姆级教程

转载请注明出处: CoderPunk

本文的链接地址: http://m.acea4.store/blog/346107.SHTML

本文最后 发布于2026-03-31 22:10:25,已经过了27天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 蛋炒饭 6 天前
    OpenCV 依赖库也容易出问题,特别是交叉编译的时候,经常找不到库文件。
  • 海带缠潜艇 4 天前
    写得真详细,正是我需要的!RK3588 的环境配置确实是个坑,感谢楼主的分享。
  • 风一样的男子 1 天前
    请问楼主,如果我想在 Docker 容器里搭建 RK3588 的开发环境,应该怎么做?
  • 北京炸酱面 2 天前
    OpenCV 依赖库也容易出问题,特别是交叉编译的时候,经常找不到库文件。