Ubuntu18.04交叉编译QT+opencv4.2.0至rv1106开发板全过程及踩坑

前情提醒,本文图文匹配为文字说明在上,图片在下,所有文件夹均不使用中文以免出错。

前置操作:交叉编译工具链的安装,QT与opencv皆需要交叉编译工具链作为前置,否则无法在开发板运行或程序报错。前置操作都在linux上操作

下载开发板对应交叉编译工具链或自行下载,可参考第一步的文章,我使用的是rv1106自带交叉编译工具链,各位也可使用linaro公司的交叉编译工具链。

交叉编译工具链下载解压即为安装,安装完成后需在系统中添加环境变量路径。

1.(在终端)打开系统环境变量文件

sudo gedit /etc/profile

 

 2.添加交叉编译器路径到文件中,这里以我自己的举例,(在文件)末尾添加

export PATH=$PATH:/opt/arm-rockchip830-linux-uclibcgnueabihf/bin

3.添加结束后保存退出,(在终端)更新系统文件变量,显示无权限则在前面添加sudo

source profile

4.(在终端)查看交叉编译器gcc版本,寻找交叉编译器路径/bin目录下,
以gcc结尾的文件名,添加-v查看版本,以此验证交叉编译器是否成功添加到环境变量中
以我自己的举例,出现右图中的情况即为成功添加到环境变量

arm-rockchip830-linux-uclibcgnueabihf-gcc -v

Ubuntu18.04交叉编译QT+opencv4.2.0至rv1106开发板全过程及踩坑_第1张图片

opencv库的编译移植,在linux上操作

第一步:下载opencv4.2.0源码,下载cmake与cmake-gui

参考文章

(24条消息) OpenCV移植到ARM全过程-I_opencv在arm上的移植_KayChanGeek的博客-CSDN博客

(24条消息) Qt+OpenCV在arm板上运行实现思路_MXY__的博客-CSDN博客

(24条消息) OpenCV 移植与交叉编译详细过程以及问题解决记录_XcodeBox的博客-CSDN博客

opencv下载

可以在opencv官网下载opencv源码包,本教程下载opencv源码的zip包,下载后解压到主文件夹内避免权限问题。

cmake、cmake-gui下载

安装
sudo apt-get install cmake
sudo apt-get install cmake-qt-gui
运行
cmake-gui

第二步:交叉编译opencv源码

打开opencv解压路径,创建新文件夹(我的为下图文件夹),放置编译配置文件。

Ubuntu18.04交叉编译QT+opencv4.2.0至rv1106开发板全过程及踩坑_第2张图片

 打开cmake-gui,按图示方法设置①opencv文件路径,与②编译配置文件的路径,再点击③configure 到CMake Setup

Ubuntu18.04交叉编译QT+opencv4.2.0至rv1106开发板全过程及踩坑_第3张图片

CMake Setup 选择
①Unix Makefiles
②Specify options……,
③点击next 到下一步。

 Ubuntu18.04交叉编译QT+opencv4.2.0至rv1106开发板全过程及踩坑_第4张图片

① OS大小写敏感,所以一定要写成Linux
②选择交叉编译工具链路径/bin 中的文件,C选择gcc,C++选择g++,在前置操作第四步中有文件图。
③选择交叉编译工具链路径/bin,用于查找gcc与g++文件
④修改下方路径选择地址为根目录查找
⑤点击finish开始加载配置文件,等待加载结束,第一次加载后参数全标红是正常现象。

Ubuntu18.04交叉编译QT+opencv4.2.0至rv1106开发板全过程及踩坑_第5张图片

配置文件第一次加载后全标红,请根据下列信息修改配置文件

①BUILD_opencv_world,勾选

②BUILD_ZLIB,勾选

③CMAKE_INSTALL_PREFIX,修改路径。该路径为编译opencv后的库文件路径,由于开发板环境的特殊性,尽量新建一个文件夹放置。

④CMAKE_BUILD_TYPE,添加Release

⑤CMAKE_CXX_FLAGS,添加-fpermissive -Wno-psabi -pthread -lrt -ldl

⑥CMAKE_EXE_LINKER_FLAGS,添加-lstdc++ -pthread -lrt -ldl -lm

⑤⑥为减少编译时错误的参数,建议添加

点击configure,查看配置参数是否还有标红,若有检查下方配置时错误,若无点击Generate,退出cmake-gui。

终端进入配置文件目录,输入make,不需要make -jx,多核可能导致编译出错。

make

若编译出错,可先在以下网址查看错误:

(24条消息) opencv交叉编译和遇到的问题_西西弗Sisyphus的博客-CSDN博客
(24条消息) 交叉编译opencv:undefined reference to `png_riffle_palette_neon_柳鲲鹏的博客-CSDN博客

 make完全结束后输入sudo make install,尽量安装在/usr/local/自己的文件夹,以便移植

sudo make install

库文件编译完成后需要为opencv配置环境变量

sudo gedit /etc/ld.so.conf.d/opencv.conf

QT库的编译移植、QT编译器的配置,在linux上操作

参考

(24条消息) Qt交叉编译移植arm开发板_qt arm 交叉编译_岩枭~的博客-CSDN博客

 在QT官网下载QT源码qteverywhere,下载对应版本源码,我所使用的是5.12.1的版本,
先解压源码。

tar xvf qt-everywhere-src-5.12.1.tar.xz

在源码目录下,寻找路径/qtbase/mkspecs/linux-arm-gnueabi-g++,该目录最后一项需对照使用的交叉编译工具链选择,我使用的是gnueabi的工具链,所以选择该目录。打开该目录的qmake.conf,修改其中内容,我的内容放上来以供参考。
下面这三项需要根据开发板的实际架构修改。
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a -lts
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a -lts

#
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
QMAKE_CC                = /opt/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-gcc
QMAKE_CXX               = /opt/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-g++
QMAKE_LINK              = /opt/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-g++
QMAKE_LINK_SHLIB        = /opt/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-g++
# modifications to linux.conf
QMAKE_AR                = /opt/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-gcc-ar cqs
QMAKE_OBJCOPY           = /opt/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-objcopy
QMAKE_NM                = /opt/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-gcc-nm -P
QMAKE_STRIP             = /opt/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-strip

QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a -lts
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a -lts

load(qt_config)

 修改完成后退回到qt源码的根目录下,创建一个可执行文件XXX.sh用于编译,该文件内容见下,若是开发板需要增加tsilb库,可查看参考网址。

-xplatform为所使用的的配置文件,即上方修改的配置文件的文件夹路径
-prefix为编译安装路径,自己设置,尽量在根目录下而非主目录下
 

#!/bin/bash
./configure -prefix /opt/qteverywhere5.12.1-rockchip \
-opensource \
-confirm-license \
-release \
-strip \
-shared \
-xplatform linux-arm-gnueabi-g++ \
-optimized-qmake \
-c++std c++11 \
--rpath=no \
-pch \
-skip qt3d \
-skip qtactiveqt \
-skip qtandroidextras \
-skip qtcanvas3d \
-skip qtconnectivity \
-skip qtdatavis3d \
-skip qtdoc \
-skip qtgamepad \
-skip qtlocation \
-skip qtmacextras \
-skip qtnetworkauth \
-skip qtpurchasing \
-skip qtremoteobjects \
-skip qtscript \
-skip qtscxml \
-skip qtsensors \
-skip qtspeech \
-skip qtsvg \
-skip qttools \
-skip qttranslations \
-skip qtwayland \
-skip qtwebengine \
-skip qtwebview \
-skip qtwinextras \
-skip qtx11extras \
-skip qtxmlpatterns \
-make libs \
-make examples \
-nomake tools -nomake tests \
-gui \
-widgets \
-dbus-runtime \
--glib=no \
--iconv=no \
--pcre=qt \
--zlib=qt \
-no-openssl \
--freetype=qt \
--harfbuzz=qt \
-no-opengl \
-linuxfb \
--xcb=no \
--libpng=qt \
--libjpeg=qt \
--sqlite=qt \
-plugin-sql-sqlite \
-recheck-all

执行该文件安装配置,若权限不足在前面加上sudo,配置完成编译源码。

./XXX.sh
XXX替换自己文件名

sudo make -j4
sudo make install

下载qt编译器opensource,官网下载安装qt编译器。

安装完成后,将交叉编译的qt源码设置到qt编译器内。

gcc/g++配置:

打开qt,选择 ①工具—>②选项,
Ubuntu18.04交叉编译QT+opencv4.2.0至rv1106开发板全过程及踩坑_第6张图片 
选择①编译器,点击②添加—>③GCC,需要把GCC中的C和C++都配置一遍,
其中④是名称,统一一下即可,⑤为编译器路径,实际上选择交叉编译工具链/bin中的gcc与g++
即可。

Ubuntu18.04交叉编译QT+opencv4.2.0至rv1106开发板全过程及踩坑_第7张图片
选择 ①Qt Versions,点击②添加,添加请寻找刚刚编译的qteverywhere源码路径下的/bin/qmake,名称会根据路径自动添加
Ubuntu18.04交叉编译QT+opencv4.2.0至rv1106开发板全过程及踩坑_第8张图片
选择构建套件(Kit),点击添加,套件中需要修改4处地方:①名称,建议与开发板统一,②设备类型,选择通用linux设备即可,③编译器,选择之前添加的交叉编译工具的编译器,④Qt版本,选择之前添加的经过交叉编译后的qt版本即可,选择完之后点击ok保存退出。
Ubuntu18.04交叉编译QT+opencv4.2.0至rv1106开发板全过程及踩坑_第9张图片

 之后创建开发板项目,选择对应开发板的构建套件即可。

 

你可能感兴趣的:(opencv,人工智能,计算机视觉)