ubuntu20.04交叉编译移植OpenCV4.7.0和QT5.12.12至ARM64位平台LKD3588(开发板为ubuntu20.04系统)(一)

本文介绍了如何在Ubuntu20.04上交叉编译OpenCV4.7.0和QT5.12.12到ARM64位LKD3588开发板。详细步骤包括环境准备、交叉编译器安装、OpenCV和opencv_contrib源码下载、依赖库安装、CMake配置、编译和安装,以及在开发板上的部署和环境配置。同时,文章提到了编译过程中可能遇到的问题及解决方案。

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

序:交叉编译的OPenCV自带的GUI在ARM开发板上由于GTK的支持问题很难用自身的GUI显示,故配合QT用于界面的设计和GUI显示。

一、环境介绍

主机:PC端ubuntu20.04 64位

目标机(开发板):ARM64开发板LKD3588 ubuntu20.04 64位

OpenCV版本:opencv-4.7.0

QT版本:5.12.12

二、PC端交叉编译OpenCV4.7.0

  1. OpenCV源码的下载Releases - OpenCV

  1. Opencv_Contrib的下载。需要下载对应的opencv版本的。

参考下载链接:https://www.raoyunsoft.com/wordpress/index.php/2020/03/09/opencvdownload/

这个网址下载速度比较快,可以从这里下载。

根据需要现在相应的版本,选择source下载源码。

  1. aarch64-linux-交叉编译器下载。推荐下载的编译器地址:

编译器下载的地址(我用的):Linaro Releases

[用的是SDK自带的编译器。在SDK prebuilts目录下,aarch64-none-linux-.

((297条消息) aarch64-linux-交叉编译器-嵌入式文档类资源-优快云文库)(此编译器没用)

aarch64-cortexa53-linux-gnu的编译器,架构cortexa53。]此解释多余,我没有用自带的编译器。

下载解压至ubuntu中的任意文件夹下,添加交叉编译器到系统环境变量:用vim打开/etc/profile文件,最后一行添加:export PATH=$PATH:/usr/local/arm......./bin(刚才解压的目录);然后重启或者source刚才编译的文件。测试是否添加成功:输入:echo $PATH 看是否有刚才添加的路径。

验证交叉编译器安装是否成功

要使用此编译器,还要在 Ubuntu 上安装一些库。sudo apt-get install lsb-core lib32stdc++6

修改环境变量后重启电脑。

特别注意:我用的是终端cmake配置的,图像化配置容易出错。

  1. 安装CMake

sudo apt-get install cmake
sudo apt  install cmake-qt-gui
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config
sudo apt-get install libncurses5 lib32z1
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

如果是在PC机上可能比较顺利,libjasper-dev这个库可能会出现无法定位,解决如下:

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

以上是需要安装的依赖库。

后面两个是交叉编译OpenCV所需相关依赖。完成之后运行cmake-gui。然后配置编译OpenCV。

下载完源码之后,把opencv_contrib-4.7.0放在opencv-4.7.0文件夹目录下

在opencv-4.7.0目录下新建build和install-opencv目录

进入build文件夹,终端运行cmake-gui

C是交叉编译器的-gcc路径;

C++是交叉编译器-g++路径

Target Root是我们交叉编译器的路径(告诉cmake从哪里找交叉编译的工具链),填好之后点finish。

等待configure完成。

然后在红色区域中:

勾选BUILD_JPEG、BUILD_PNG;(我没用上)

MAKE_BUILD_TYPE输入Release;

MAKE_INSTALL_PREFIX选择我们刚创建的install-opencv目录;

OPENCV_EXTRA_MODULES_PATH 填写opencv_contrib-4.7.0/modules的路径。(用上,会有很多功能)。

别忘了OPENCV_GENERATE_PKGCONFIG勾选上。

然后configure。

然后再点击Configure等待配置完成。配置完成后点击Generate按钮。

点击Generate按钮后,

以下是用终端命令cmake配置编译选项:

在配置之前需要安装需要的依赖环境,其中有些装不了的就不用装

sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

sudo apt-get install build-essential qt5-default ccache libv4l-dev libavresample-dev libgphoto2-dev libopenblas-base libopenblas-dev doxygen pylint libvtk6-dev

切换到build目录下,在终端执行以下命令:(没有指定编译器,需要指定编译器,不然默认系统自带的编译器)

cmake -D CMAKE_BUILD_TYPE=RELEASE
-D CMAKE_CXX_COMPILER=/usr/local/gcc/bin/g++ //指定编译器的位置
-D CMAKE_C_COMPILER=/usr/local/gcc/bin/gcc //指定编译器的位置
-D CMAKE_INSTALL_PREFIX=/usr/local
-D OPENCV_GENERATE_PKGCONFIG=ON
-D INSTALL_PYTHON_EXAMPLES=ON
-D INSTALL_C_EXAMPLES=ON
-D OPENCV_EXTRA_MODULES_PATH= /home/cht/opencv4/opencv_contrib-4.0.1/modules
-D OPENCV_EXAMPLES=ON ..

CMAKE_INSTALL_PREFIX:该选项为opencv安装的目录,可按实际目录进行修改,一般放在/usr/local目录下OPENCV_GENERATE_PKGCONFIG:打开 pkg-configOPENCV_EXTRA_MODULES_PATH:该选选项为opencv_contrib模块下module文件夹,按实际目录进行修改,若不编译opencv_contrib模块,该选项可以省略.. :表示CMakeList.txt在上级目录,命令最后的 .. 不能够省略,否则会出现找不到CMakeList.txt

cmake 执行过程需要下载一些压缩包,可能由于网络原因下载不下来,导致出错,这时可以删除 build 文件夹下的内容,重新执行 cmake 命令。

表示生成Makefile成功。接下来退出cmake-gui。进入build目录,在终端下打开运行:

make -j8
make install

等待生成之后make -j8 && make install 。耐心等待即可完成编译和安装。此时install-opencv文件夹就是我们交叉编译出来的ARM版本的OpenCV4.7.0。

好像liarno的64为交叉编译器编译有错误,所以我重新换了个编译器编译

编译器下载地址:

Downloads | GNU-A Downloads – Arm Developer

我用的是这个编译器。

三、LKD3588开发板上的部署

  1. 打包拷贝:将上面编译出的build文件夹下的install文件夹压缩成.tar.gz文件,拷贝到开发板文件夹目录下,解压。

比如:解压路径:/opt/opencv4.7/install

  1. 添加动态库加载路径:vim /etc/ld.so.conf.d/opencv.conf.再打开的文件第一行写上上一步解压的opencv的lib地址。

如:/opt/opencv4.7/install/lib

保存退出,运行sudo ldconfig激活生效

  1. 环境变量的配置:先将解压的opencv文件中位于/lib/pkgconfig下的opencv.pc进行修改

修改完成后,保存退出,运行vim /etc/bash.bashrc在最后一行添加如下:

 PKG_CONFIG_PATH=/opt/opencv4.7/install/lib/pkgconfig:$PKG_CONFIG_PATH
 export PKG_CONFIG_PATH

保存退出,重启ubuntu激活生效。

检测是否成功:终端运行如下:

(base) root@wr:~# pkg-config --libs --cflags opencv4
-I/opt/opencv4.7/install/include/opencv4 -L/opt/opencv4.7/install/lib -lopencv_gapi -lopencv_highgui -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_video -lopencv_calib3d -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core

说明pkg配置成功。

四、实例验证

  1. PC端交叉编译可执行程序。

在交叉编译之前,需要向上面一样操作,设置一下环境变量和动态库加载,才能在ubuntu上交叉编译程序。否则找不到对应的库和头文件。

编译出的文件为a.out 64位,ARM aarch64说明opencv库交叉编译正确。

  1. 开发板交叉编译可执行程序(开发板没有安装交叉编译器)

直接将主机交叉编译的example程序复制到开发板上,可以运行。会出现以下错误

这并不代表不可以运行opencv程序,用一个简单的代码测试以下,无关gui的函数是否可以正常运行(自己编写一个程序测试)如下:

#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
{
    Mat src = Mat::zeros(12,12, CV_8UC3);
    Rect rect(src.cols/4, src.rows/4, src.cols/2, src.rows/2);
    src=src(rect);
    imwrite("test.jpg", src);
    printf("创建成功! \n");
    waitKey(0);
    return 0;
}

执行编译出文件(在主机上交叉编译,复制到开发板运行)

复制到开发板运行结果正确。至此opencv移植到开发板完成。

记录编译过程中遇到的问题:

1.

解决方案:

打开opencv源码目录,编辑文件 vim 3rdparty/libpng/pngpriv.h

第130行注释掉, 修改为131行

 130 /* #  if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \ */
 131 # if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
 132    defined(PNG_ALIGNED_MEMORY_SUPPORTED)
 133 #     define PNG_ARM_NEON_OPT 2
 134 #  else
 135 #     define PNG_ARM_NEON_OPT 0
 136 #  endif
 137 #endif

2.

解决方案:应该是有些依赖库没有安装好。把上面的依赖库都安装完毕,尤其是要使用编译器需要的依赖库。

还有些问题参考下面链接中的解决办法:

(324条消息) Ubuntu18.04下使用CMake-gui安装OpenCV4.5.0和OpenCV_contrib-4.5.0,以及遇到的报错。_菜鸟的追梦旅行的博客-优快云博客

<think>好的,用户想在RK3588平台交叉编译OpenCV 3.4.1,我需要帮他们找到相关的步骤方法。首先,我需要检查提供的引用资料里有没有相关的信息。引用[2]提到RK3588移植OpenCV可以通过交叉编译,但具体版本是OpenCV3.4.1吗?引用[3][4]是关于海思平台OpenCV3.4.1的交叉编译,可能步骤类似,但RK3588是Rockchip的芯片,海思不同,所以需要调整。引用[5]是Ubuntu下编译OpenCV3.4.10,可能环境配置部分可以参考。 用户需要的是RK3588交叉编译教程,而提供的引用中没有直接针对RK3588OpenCV3.4.1的组合。但引用[2]提到可以在Ubuntu交叉编译OpenCV,然后在RK3588上使用,所以可能需要结合通用的交叉编译步骤RK3588的工具链。 首先,交叉编译通常需要工具链。RK3588ARM架构,可能需要aarch64-linux-gnu工具链。用户需要安装合适的交叉编译工具,比如gcc-aarch64-linux-gnug++-aarch64-linux-gnu。然后,下载OpenCV3.4.1源码,配置CMake时指定工具链文件,设置正确的编译选项,比如关闭不需要的模块,指定安装路径,最后进行编译安装。 另外,引用[3][4]中提到的些配置选项可能适用,比如设置-DCMAKE_TOOLCHAIN_FILE,以及处理依赖库的路径。需要确保在CMake配置时正确指向RK3588的sysroot,包含必要的头文件库文件。可能还需要处理第三方库的交叉编译,比如libjpeg、libpng等,或者使用预编译的库。 用户可能会遇到依赖问题或编译错误,比如缺少某些库或链接错误。需要检查CMake的输出,确保所有依赖项都被正确找到,并在必要时添加LIBS路径,如引用[4]中提到的-L选项。 总结步骤可能包括:准备交叉编译环境,获取OpenCV源码,配置CMake参数,处理依赖库,编译安装,最后将生成的文件部署到RK3588平台进行测试。需要详细说明每个步骤的具体命令注意事项,确保用户能够逐步操作。</think>### RK3588平台交叉编译OpenCV 3.4.1的步骤 #### **1. 准备交叉编译环境** - **安装交叉编译工具链**: RK3588基于ARM64架构,需安装对应的工具链(如`aarch64-linux-gnu`): ```bash sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu ``` - **配置Sysroot**: 从RK3588开发板中复制系统头文件到Ubuntu主机,或使用官方提供的sysroot包[^2]。 #### **2. 获取OpenCV源码** 下载OpenCV 3.4.1源码并解压: ```bash wget https://github.com/opencv/opencv/archive/3.4.1.zip unzip 3.4.1.zip cd opencv-3.4.1 ``` #### **3. 配置CMake参数** 创建`build`目录并配置编译选项: ```bash mkdir build && cd build cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-gnu.toolchain.cmake \ -DCMAKE_INSTALL_PREFIX=/path/to/install \ -DBUILD_LIST=core,imgproc,highgui \ -DWITH_GTK=OFF \ -DWITH_JPEG=ON \ -DWITH_PNG=ON \ .. ``` **关键参数说明**: - `-DCMAKE_TOOLCHAIN_FILE`:指定ARM64交叉编译工具链文件,需手动创建或修改路径。 - `-DCMAKE_INSTALL_PREFIX`:设置安装路径,后续部署到RK3588时需同步此路径。 - `-DBUILD_LIST`:仅编译必要模块以减少依赖体积。 #### **4. 处理依赖库** - **第三方库交叉编译**: 若依赖库(如libjpeg)未预编译,需先交叉编译并指定路径: ```bash -DJPEG_INCLUDE_DIR=/path/to/jpeg/include \ -DJPEG_LIBRARY=/path/to/jpeg/lib/libjpeg.so ``` - **链接库路径**: 若编译时提示库缺失,参考引用[4]添加`-L`路径: ```bash LIBS += -L/path/to/opencv/3rdparty/lib ``` #### **5. 编译与安装** ```bash make -j$(nproc) make install ``` 编译完成后,安装目录会生成`lib`、`include`等文件。 #### **6. 部署到RK3588平台** 将安装目录(`/path/to/install`)复制到RK3588开发板,并在项目中链接: ```bash export LD_LIBRARY_PATH=/path/to/install/lib:$LD_LIBRARY_PATH ``` #### **7. 验证编译结果** 在RK3588上运行测试程序: ```cpp #include <opencv2/core.hpp> int main() { cv::Mat img; return 0; } ``` 编译命令需指定库路径: ```bash aarch64-linux-gnu-g++ test.cpp -I/path/to/install/include -L/path/to/install/lib -lopencv_core ``` --- ### **注意事项** 1. **工具链文件**:若OpenCV未提供RK3588专用工具链文件,需手动编写,参考以下模板: ```cmake 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++) ``` 2. **依赖冲突**:若编译失败,尝试关闭非常用模块(如`-DWITH_CUDA=OFF`)。 3. **性能优化**:添加`-DENABLE_NEON=ON`以启用ARM NEON指令加速。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_41392061

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值