交叉编译项目 QT opencv linuxdeployqt打包

1 Opencv 交叉编译

目的:将OpenCV移植到ARM板上

PC操作系统:VMWare虚拟机上安装的Ubuntu 22.04(x86_64)

OpenCV版本:4.7.0

交叉工具链:aarch64-linux-gnu,gcc version 9.3.0(这里重点说明:arm-linux-gnueabihf针对的是32位arm架构,aarch64-linux-gnu针对的是64位arm架构)

目标平台:arm板

1、安装交叉编译器

sudo apt-get install gcc-aarch64-linux-gnu

sudo apt-get install g++-aarch64-linux-gnu

2、安装和配置cmake-gui

sudo apt-get install cmake-gui  #安装cmake-gui

sudo cmake-gui #启动cmake-gui对话框

sudo mkdir opencv/build #创建文件夹用于存放编译文件

sudo mkdir opencv/opencv_install #创建文件夹opencv_instal用于存放编译结果

 弹出CMake配置对话框。填入opencv源代码目录和编译文件目录,点Configure.

选择交叉编译器:

点击Next:

注意:把c和c++路径换成自己的:/usr/bin/aarch64-linux-gnu-gcc,

c++:/usr/bin/aarch64-linux-gnu-g++;             

Target Root输入:/usr/aarch64-linux-gnu/lib

4、点击Finish。

5、Search位置输入Z,把zip库(BUILD_ZLIB选项)选中(Ubuntu 20.04 不选择可能会报错)。

6、Search位置输入install(CMAKE_INSTALL_PREFIX选项),修改下opencv编译后存放的目录路径:这里随便选择一个空的目录即可。

7、点击Configure。

8、点击Generate。关闭对话框。

3、编译和安装OpenCV4

$ cd opencv/build    #进入配置好的编译目录

$ sudo make -j8      #启动8个核一起编译  成功出现 [100%] Built target opencv_test_……

$ sudo make install  #拷贝编译结果到opencv/opencv_install目录  成功出现 -- Set runtime path of "/home/wq/bin/opencv_version" to "/home/wq/lib"

4、可能会遇到的bug

(1)libpng  recompler -lPIC

解决:在cmake-gui中打开advance选项,设置-fPIC,如下图。

设置完之后重新configure

2 搭建Qt5.14.交叉编译环境

本文硬件环境是ubuntu22.04 X86平台,但是编译出来的程序是在arm64架构上运行

一.安装QT5:

二.安装编译所需的组件

sudo apt install build-essential libgl1-mesa-dev gperf libclang-dev -y

#安装python环境(QT中的一些功能、组件需要用到)

sudo apt install python2 -y

sudo apt install python2-dev -y

sudo apt install python3 -y

sudo apt install python3-dev -y

sudo apt install python3-pip -y

#安装aarch64(arm64)编译链工具。国产CPU,如飞腾、华为麒麟等是这个架构(特别注意需要查看自己的系统位数,本人是X86_64)

sudo apt install g++-aarch64-linux-gnu -y

sudo apt install gcc-aarch64-linux-gnu -y

三.下载QT5源码

Index of /archive//qt5.14/5.14.2/single

注意:本人是解压到ubuntu22.04上,所以选择:qt-everywhere-src-5.14.2.tar.xz,window上下载zip文件

四.配置和编译源码

1 配置编译QT5的aarch64架构源码

进入刚才解压好的源码目录中,打开终端输入:

#配置编译参数

./configure -release -opensource -confirm-license -xplatform linux-aarch64-gnu-g++ -prefix /usr/local/qt5.14.2arm -nomake examples -no-opengl -silent -qpa linuxfb -skip qtquick3d -skip qtwayland -skip qtlocation -skip qtscript  -no-sse2 -no-openssl -no-cups -no-glib -no-pkg-config -no-separate-debug-info  -qt-libjpeg -qt-zlib -qt-libpng -skip qtvirtualkeyboard

其中:/usr/local/qt5.14.2arm 是编译后的安装目录,可自行修改

执行成功的话,如图:

2 编译:

make -j4

遇到编译不过的模块可以直接跳过。

遇到需要include的地方,在提示的文件添加对应的include。

将编译好的文件安装到指定位置(安装位置在前面配置参数时已设置):sudo make install

五、搭建 Qt Creator 交叉编译环境

安装完成后, 配置Qt Creator Kits。打开Qt,点击工具->选项

注意:本文安装的qmake路径:/usr/local/qt5.14.2arm/bin/qmake

配置 C++编译器:

注意替换成自己的g++编译路径,我的在:/usr/bin/aarch64-linux-gnu-g++;   

配置 Kits,选择刚才的Qt versions5.1.4.2和C++编译器:

至此Qt交叉编译环境就搭建好了,可以新建一个项目试试,在新建项目时的Kits选项记得把刚才添加Kits也勾选上。

3 qt使用opencv

添加opencv头文件

INCLUDEPATH += /usr/local/include/

添加库文件

LIBS += -L/usr/lib/ -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs

4 linux下进行Qt打包发布

使用linuxdeployqt的原因:在arm板子上缺少编译的opencv_core.so这几个库,所以没办法运行QMENU2可执行程序,所以得把ubuntu22.04下面编译好的openvcv库全打包过去就可以了运行QMENU2。

1.下载linuxdeployqt

linuxdeployqt-x86_64.AppImage,下载地址:

Releases · probonopd/linuxdeployqt · GitHub

2. 安装linuxdeployqt

chmod 777 linuxdeployqt

再把这个可执行文件扔进/usr/local/bin目录,这样,我们就可以在其他目录访问了

mv linuxdeployqt /usr/local/bin

3 .打包程序

在编译完成的debug或者release目录下使用linuxdeployqt的打包命令,这里教程很多自行百度。

打包到arm后可以使用readelf -d appname的命令查看app的链接库路径。

这里就显示链接库应该放到$ORIGIN/lib下面

把opencv的库复制到这个lib下就可以运行了。

注意:linuxdeployqt开发者说要使用在最老的lts版本上,目前最老的好像是ubuntu14,所以之后的ubuntu版本都不能使用,解决办法是使用linuxdeployqt最老的版本,因为这个限制是在19年的某次更新添加的。

部分配图来源其他博客,此处做一个整合和新的踩坑的总结。

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值