OpenCV+Qt+CMake安裝+十種踩坑


平台:win10 x64+opencv-3.4.1 + qt-x86-5.9.0 + cmake3.13.4 x64

OpenCV+Qt+CMake安裝,及目前安裝完后打包:mingw32-make時報錯的處理

一、下載

由於網速原因,官網不好下載,所以給出其他鏈接

OpenCV下載:https://blog.csdn.net/love666666shen/article/details/76449155

Qt下載:http://www.qtcn.org/bbs/read-htm-tid-1075.html

CMake下載:http://xiazai.zol.com.cn/detail/44/433377.shtml

CMake的官網比較容易打開,我下載了最新版的win x64版:cmake-3.13.4-win64-x64.zip

所以,綜上,我下載了:opencv-3.4.1-vc14_vc15.exe + qt-opensource-windows-x86-5.9.0.exe + cmake-3.13.4-win64-x64.zip(官網下的最新版)

二、安裝

1.OpenCV安裝:opencv-3.4.1-vc14_vc15.exe

 見我另一篇博客:Visual Studio 2015部署OpenCV  中四

雙擊該可執行文件后更改路徑(我的是:D:\ProgramFiles)后點擊Extract”即可完成安裝

注意:配置配置系統環境變量哦!我的PATH是:D:\ProgramFiles\opencv\build\x64\vc15\bin

備注:OpenCV安裝會自動在D:\ProgramFiles文件夾下添加opencv文件夾

2.Qt安裝:qt-opensource-windows-x86-5.9.0.exe

雙擊安裝包后->出現Qt5.9.0設置,單擊“下一步“->出現賬戶注冊,點擊"Skip"->出現歡迎對話框,點擊"下一步"->出現安裝文件夾對話框,更改后(我的是:D:\ProgramFiles(x86)\Qt5.9.0)

文件夾名字中間不能有空格,點擊"下一步"->出現選擇組件對話框,在Qt 5.9處勾選:MinGW 5.3.0 32 bit,Tools處勾選:MinGW 5.3.0,點擊"下一步"->出現許可協議對話框,選擇接受

點擊"下一步"->出現開始菜單快捷方式,輸入默認:Qt5.9.0,點擊"下一步"->出現已做好安裝准備對話框,點擊"安裝"->出現正在創建維護工具對話框,點擊"下一步"->

出現正在完成Qt5.9.0向導對話框,去掉勾選:登錄Qt Creator,點擊"完成"

附:

“Qt 5.9.1”節點下面是 Qt 的功能模塊,包括用於不同編譯器和平台的模塊,這些模塊包括內容如下:

  • MinGW 5.3.0 32 bit 編譯器模塊。MinGW 是 Minimalist GNU for Windows 的縮寫,MinGW 是 Windows 平台上使用的 GNU 工具集導入庫的集合。
  • 用於 UWP 編譯的模塊。UWP 是 Windows 10 中 Universal Windows Platform 的簡稱,有不同編譯器類型的 UWP。
  • 用於 windows 平台上的 MSVC 編譯器模塊,如 msvc2015 32-bit 和 msvc2015 64-bit 等。要安裝 MSVC 編譯器的模塊,需要計算機上已經安裝相應版本的 Visual Studio。
  • 用於 Android 平台的模塊,如 Android x86 和 Android ARMv7。
  • Sources 是 Qt 的源程序。
  • Qt Charts是二維圖表模塊,用於繪制柱狀圖、餅圖、曲線圖等常用二維圖表。
  • Qt Data Visualization 是三維數據圖表模塊,用於數據的三維顯示,如散點的三維空間分布、三維曲面等。
  • Qt Purchasing、Qt WebEngine、Qt Network Auth(TP)等其他模塊,括號里的 TP 表示技術預覽。
  • Qt Scritp(Deprecated)是腳本模塊,括號里的“Deprecated”表示這是個已經過時的模塊。

“Tools”節點下面是一些工具軟件,包括內容如下:

    • Qt Creator 4.3.1 是用於 Qt 程序開發的 IDE。
    • MinGW 5.3.0 是 MinGW 編譯工具鏈。
    • Strawberry Perl 是一個 Perl 語言工具。

注意:QT配置系統環境變量需要添加兩個路徑

我的是:D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\binD:\ProgramFiles\Qt5.9.0\5.9\mingw53_32\bin兩個路徑稍微有些差別,一定要小心哦!

3.CMake安裝: cmake-3.13.4-win64-x64.zip(官網下的最新版)

cmake-3.13.4-win64-x64.zip解壓即可,我的是放到:D:\ProgramFiles文件夾下

注意:配置配置系統環境變量哦!我的PATH是D:\ProgramFiles\cmake-3.13.4-win64-x64\bin

 

另外附上exe的安裝:

CMake3.4.3.exe安裝

雙擊安裝包后->出現歡迎使用CMake3.4.3安裝向導對話框,單擊“下一步“->出現許可證協議對話框,點擊"我接受"->出現安裝選項對話框,選擇:Add CMake to the system  PATH for all users

,勾選:創建桌面快捷方式,點擊"下一步"->出現選擇安裝位置對話框,更改后(我的是:D:\ProgramFiles(x86)\CMake),點擊"下一步"->出現選擇開始菜單”文件夾對話框,

默認輸入:CMake 3.4.3,點擊"安裝"->點擊"完成"。

注意:配置配置系統環境變量哦!注意:配置配置系統環境變量哦!注意:配置配置系統環境變量哦!注意:配置配置系統環境變量哦!

 注意:配置配置系統環境變量哦!

OpenCV的編譯

進入CMake->設置源代碼和編譯目標文件的路徑(在D盤新建一個文件夾:buildOpenCV,用於存放編譯后的目標文件,我的編譯目標文件的路徑:D:\Working\buildOpenCV和源文件的路徑:

D:\ProgramFiles\opencv\sources)-> 點擊“Configure按鈕”,出現配置對話框->在“Specify the generator for this project”內選擇“MinGW Makefiles”選項,在下邊的編譯器類型中,選擇:

Specify native compilers”,單擊“Next”->在編譯器選擇器選擇界面,在C后面選擇C編譯路徑(我的為:D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\bin\gcc.exe),C++后選擇C++編譯器路徑

(我的為:D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\bin\g++.exe),單擊“Finish”按鈕->單擊“Configure”按鈕

在配置完成后,選中"WITH_OPENGL"、"WITH_QT",將“WITH_IPP”取消選擇,->再次單擊“Configure”按鈕

最后,在Name表中把變紅色的路徑更改下:

點擊 ”Configure“,再次配置:(以我的為例)
    不勾選 WITH_IPP
    設置 QT_MAKE_EXECUTABLED:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\bin\qmake.exe  備注:此項沒有,需要點擊Add Entry添加

    Name:QT_MAKE_EXECUTABLE ,Type: PATH ,Value:D:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\bin\qmake.exe
    設置 Qt5Concurrent_DIRD:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Concurrent
    設置 Qt5Core_DIRD:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Core
    設置 Qt5Gui_DIRD:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Gui
    設置 Qt5Test_DIRD:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Test
    設置 Qt5Widgets_DIRD:\ProgramFiles\5.9.3\mingw53_32\lib\cmake\Qt5Widgets
    設置 Qt5OpenGL_DIRD:\ProgramFiles\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5OpenGL
    設置 CMAKE_BUILD_TYPERelease 或者 RelWithDebInfo


再次點擊 “Configure”,再次配置

安裝過程十種踩坑

1.Cmake configure后一直報錯——opencv_ffmpeg_dll,opencv_ffmpeg_64_dll下載超時

解決方案在編譯目標文件的路徑(我的是:D:\Working\buildOpenCV)下找到CMakeDownloadLog.txt,里邊有opencv_ffmpeg_dll和opencv_ffmpeg_64_dll下載鏈接:

(類似於:https://raw.githubusercontent.com/opencv/opencv_3rdparty/${FFMPEG_BINARIES_COMMIT}/ffmpeg/)ocv_download(PACKAGE opencv_ffmpeg.dll

分別輸入到瀏覽器下載兩個的文件,如果瀏覽器打不開,用手機下載,然后傳到電腦上,並放到“編譯目標文件的路徑\3rdparty\ffmpeg”文件夾下

(我的是—D:\Working\buildOpenCV\3rdparty\ffmpeg)

2.之前下載的opencv_ffmpeg_dll,opencv_ffmpeg_64_dll拷貝入“編譯目標文件的路徑\3rdparty\ffmpeg”文件夾下,Cmake configure后還是報錯——opencv_ffmpeg_dll,opencv_ffmpeg_64_dll下載超時

這是因為:下載opencv_ffmpeg_dll,opencv_ffmpeg_64_dll時默認以MD5校驗,就是每次下載的文件內容一樣,但是MD5檢驗碼不一樣

兩種解決方案:

1)重新下載

2)在“OpenCV的解壓路徑\opencv\sources\.cache\ffmpeg”文件夾下,然后改名(我的更改為:b8120c07962d591e2e9071a1bf566fd0-opencv_ffmpeg.dll和dc9c50e7b05482acc25d6ce0ac61bf1d-opencv_ffmpeg_64.dll),此MD5校驗碼去編譯目標文件的路徑(我的是:D:\Working\buildOpenCV)下找到CMakeDownloadLog.txt

下分別對應拷貝,拷貝后更改文件名:MD5-opencv_ffmpeg.dll和MD5-opencv_ffmpeg_64.dll

注意opencv_ffmpeg_dll和opencv_ffmpeg_64_dll的MD5檢驗碼不一樣哦!

 

3.執行mingw32-make報錯——D:\ProgramFiles不是內部或外部命令

解決方案路徑添加——D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\bin

注意:QT配置系統環境變量需要添加兩個路徑:D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\binD:\ProgramFiles\Qt5.9.0\5.9\mingw53_32\bin,

兩個路徑稍微有些差別,一定要小心哦!

 

4.執行mingw32-make報錯——D:\ProgramFiles不是內部或外部命令

查資料疑似路徑包含中文字符,重新卸載CMake后安裝CMake依舊報錯,發現CMake會默認source code和binaries不變->刪除buildOpenCV文件夾

下所有內容,重建buildOpenCV(編譯后的目標文件夾)->按照Cmake的工程配置,仍然報錯

最后發現CMake的Compelers的對話框中路徑字符錯誤:(后邊的斜杠錯誤)

C后邊是——D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\bin/gcc.exe

C++后邊是——D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\bin/g++.exe

解決方案:

C后邊是——D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\bin\gcc.exe

C++后邊是——D:\ProgramFiles\Qt5.9.0\Tools\mingw530_32\bin\g++.exe

注意:window下的路徑后邊的斜杠是“\”,而瀏覽器的是“/”

 

5.重新安裝OpenCV后,CMake點擊configure報錯:無用的字符... invalid...

解決方案:發現CMake會默認source code和binaries不變->刪除buildOpenCV文件夾下所有內容,重建buildOpenCV(編譯后的目標文件夾)->

把OpenCV的最新安裝路徑放在在source code,然后按照Cmake的工程配置,正常

注意:重新安裝OpenCV后系統環境變量也要更改哦!

 

6.執行mingw32-make -j8報錯——多線程編譯錯誤信息不明確

解決方案:使用單線程編譯

備注:make -jn

n為線程數,比如,我想要4線程編譯:make -j4

 

7.執行mingw32-make報錯:... windres.exe: unknown option -- W ...或者

  • FORMAT is one of rc, res, or coff, and is deduced from the file name
  • extension if not specified. A single file name is an input file.
  • No input-file is stdin, default rc. No output-file is stdout, default rc.

解決方案:

在 cmake-gui 編譯配置中:

  • 不勾選 ENABLE_PRECOMPILED_HEADERS

然后重新Configure-Generate-mingw32-make

 

8.執行mingw32-make到24%報錯——D:\ProgramFiles\opencv\sources\3rdparty\protobuf\src\google\protobuf\stubs\io_win32.cc:94:3:

warning: identifier 'nullptr' is a keyword in C++11 [-Wc++0x-compat]
   return s == nullptr || *s == 0;

解決方案:

在 cmake-gui 編譯配置中:

勾選 ENABLE_CXX11

然后重新Configure-Generate-mingw32-make

 

9.執行mingw32-make后45%左右遇到這種錯誤 :

sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA 錯誤

解決方案:
修改E:\OpenCV_3.3.1\opencv\sources\modules\videoio\src\cap_dshow.cpp文件,在#include "DShow.h"這行的上面

加一行#define NO_DSHOW_STRSAFE

然后重新Configure-Generate-mingw32-make

 

10.執行mingw32-make后然后繼續編譯,一路順暢,然而98%時死掉:

報錯如下:

[ 98%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.obj

C:/Qt/Tools/mingw530_32/i686-w64-mingw32/include/c++/cmath:1119:11: error: '::hypot' has not been declared

using ::hypot;

解決方案:
把CMake配置中的BUILD_opencv_python3和下面那個BUILD_opencv_python3_bindings_generator的off掉(把后邊的勾選去掉)

然后重新Configure-Generate-mingw32-make

注意:如果不使用opencv_python,需要在CMake界面取消勾選BUILD_opencv_python以及其他和 opencv_python有關的選項,否則編譯不通過。

 

另外還有其他錯誤—可見此博客:https://blog.csdn.net/u010847519/article/details/61196093

以上只是通常出現的情況,其他情況請看Qt官網的幫助文檔https://wiki.qt.io/How_to_setup_Qt_and_openCV_on_Windows

 

附—常見十大編譯問題解決方案:

1)將"opencv安裝目錄\sources"內的“cmakeOpenCVCompilerOptions.cmake”文件打開,
將其中的語句add_extra_compiler_option(-Werror=non-virtual-dtor)進行注釋,改為# add_extra_compiler_option(-Werror=non-virtual-dtor)

2)在編譯的過程中,可以在語句的末尾加上“-i”忽略錯誤,即使用語句:

mingw32-make -i

mingw32-make install -i

3)查看CMake的路徑是否包含空格,如果包含,卸載重裝

4)查看需要加入的系統路徑,是否都添加了

5)查看CMake的Configure是否選為了MinGW Makefiles

6)自己定位Qt自帶的C、C++編譯器的位置:

C編譯器的位置為——Qt安裝路徑\Qt5.9.0\Tools\mingw530_32\bin\gcc.exe

C++編譯器的位置為——Qt安裝路徑\Qt5.9.0\Tools\mingw530_32\bin\g++.exe

7)在"二進制目標文件路徑/CMake/CMakeOutput.log"、“二進制目標文件路徑/CMake/CMakeError.log”內查找問題,從而發現解決方案

8)不能編譯運行,提示找不到編譯器,可能是因為在目錄下面有中文符號

9)編譯器內不能顯示光標,此問題可能是因為使用谷歌輸入法造成的,修改內嵌編輯模式

10)編譯可以運行,在debug模式下exe文件無法運行,提示“無法啟動此程序,因為程序中丟失qt5cored.dll”,該問題可能是沒有設置環境變量,添加環境變量即可

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM