一、編譯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即可。
接下來調試成功: