ubuntu下利用Qt添加相机设备并运行arm程序
一、编译x86-64平台的opencv demo
紧接上一篇,我电脑里现在同时存在两个版本的opencv库,一个是基于x86-64平台的3.4.11库,一个是基于arm平台的4.7.0库,现在我正常运行opencv的demo,直接报错:没有找到oencv4.7.0的库,这是因为之前编译arm架构的opencv 4.7.0的库时,在/usr/local/lib下生成了4.7.0版本的cmake文件夹,而opencv的demo下的CMakeisets.txt里的语句:find_package(OpenCV REQUIRED)会搜索当前opencv目录下的.cmake文件,cmake文件夹下存在该文件:
这里要做的就是把/uar/local/lib下的cmake文件夹删除即可。
find_package()的具体搜索方法见以下链接:
【CMake】find_package介绍-定位外部依赖_findpackage config模式-CSDN博客
常规的opencv demo对应的CMakeLIsts.txt语句:
cmake_minimum_required( VERSION 3.1 )# 声明一个 cmake 工程
project( main )# 设置编译模式
set( CMAKE_BUILD_TYPE "Release" )#添加OPENCV库
#指定OpenCV版本,代码如下
#find_package(OpenCV 3.3 REQUIRED)
#如果不需要指定OpenCV版本,代码如下
find_package(OpenCV REQUIRED)#添加OpenCV头文件
include_directories(${OpenCV_INCLUDE_DIRS})#显示OpenCV_INCLUDE_DIRS的值
#message(${OpenCV_INCLUDE_DIRS})# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( main main.cpp )# 将库文件链接到可执行程序上
target_link_libraries( main ${OpenCV_LIBS})install(TARGETS main DESTINATION /home/user)
二、编译arm版本的qt
具体的编译方法建议下链接:
为RK3568或RK3288开发板创建交叉编译环境{采用amd64的ubuntu系统配置交叉编译arm64开发环境}(保姆级包括安装QT)超详细记录版_rk3568交叉编译工具链-CSDN博客
qt ubuntu 20.04 交叉编译_ubuntu qt交叉编译-CSDN博客
配置好arm编译器后,用qt打开opencv工程,编译一直报opencv函数的错误,这是因为find_package()找不到具体的opencv路径,因为我的opencv不是放在/usr目录下,此时只需要在fina_package()前面加上 :
set(OpenCV_DIR /home/vensin/workspace/623/opencv/opencv-4.7.0/build)
即可编译成功,注意:此时运行qt是无法直接得出结果的,因为在x86-64平台无法运行arm程序。
cmake_minimum_required( VERSION 3.1 )# 声明一个 cmake 工程
project( main )# 设置编译模式
set( CMAKE_BUILD_TYPE "Release" ) #Debug Release#添加OPENCV库
#指定OpenCV版本,代码如下
#find_package(OpenCV 3.3 REQUIRED)
#如果不需要指定OpenCV版本,代码如下
set(OpenCV_DIR /home/vensin/workspace/623/opencv/opencv-4.7.0/build)
find_package(OpenCV REQUIRED)#添加OpenCV头文件
include_directories(${OpenCV_INCLUDE_DIRS})#显示OpenCV_INCLUDE_DIRS的值
#message(${OpenCV_INCLUDE_DIRS})# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( main main.cpp )# 将库文件链接到可执行程序上
target_link_libraries( main ${OpenCV_LIBS})
三、添加设备并调试
具体添加相机设备的方法如下:
3:Ubuntu上配置QT交叉编译环境并编译QT程序到Jetson Orin Nano(ARM)_ubuntu安装qt jeston orin nano opencv-CSDN博客
这里有几个细节要注意:
1.需要的话要在GDB server executable中加入/usr/bin/gdbserver:
2.必须在CMakeLists.txt 中加入:
install(TARGETS main DESTINATION /home/user)
否则Deploy All Projects会失败(这里的/home/user是rk3568板子上的路径);
3.下图中的Build & Run 、 运行->运行配置等设置如下(mrdvConfig是设备名):
cmake_minimum_required( VERSION 3.1 )# 声明一个 cmake 工程
project( main )# 设置编译模式
set( CMAKE_BUILD_TYPE "Release" ) #Debug Release#添加OPENCV库
#指定OpenCV版本,代码如下
#find_package(OpenCV 3.3 REQUIRED)
#如果不需要指定OpenCV版本,代码如下
set(OpenCV_DIR /home/vensin/workspace/623/opencv/opencv-4.7.0/build)
find_package(OpenCV REQUIRED)#添加OpenCV头文件
include_directories(${OpenCV_INCLUDE_DIRS})#显示OpenCV_INCLUDE_DIRS的值
#message(${OpenCV_INCLUDE_DIRS})# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( main main.cpp )# 将库文件链接到可执行程序上
target_link_libraries( main ${OpenCV_LIBS})install(TARGETS main DESTINATION /home/user)
4.这里如果将qt的编译模式修改为Debug则会出现opencv库错误的问题,这是因为之前在编译arm的opencv库的时候选择的是Release模式,所以如果要调试,则需要重新编译一份Debug模式的opencv的arm库。
做完以上步骤以后,运行程序会在板子的指定路径下生成可执行文件。
四、opencv库报错的问题
在用qt编译arm程序时,将qt编译器设置为Debug模式会报libopencv_gapi.so.4.7.0wrong format的错误,我还以为是opencv编译的时候
-D CMAKE_BUILD_TYPE=RELEASE
模式为Release的问题,于是我就把 -D CMAKE_BUILD_TYPE=DEBUG又编译了一遍opencv库,尴尬的是没用,两者编译出来的库是一样的,并没有release和debug的区别,只能继续找问题,既然库没问题,那就看是不是环境变量的问题:
这个LD_LIBRARY_PATH里面加入了当前opencv的include目录和lib,删掉include就可以了(lib后面我也删了)。
五、rk3568平台的远程调试
点击QT的调试,发现报错:
无法对板子程序进行调试。
后续解决办法为:
1.安装gdb-multiarch:
sudo apt-get install gdb-multiarch
2.创建新的Debugger, Path选择/usr/bin/gdb-multiarch,Name设为arm debug:
arm平台的kits->Debugger选择上文创建的arm debug即可。
接下来调试成功: