在靜態庫下使用MFC和共享DLL下使用MFC 這兩種情況 opencv的配置,以及配置opencv配置中容易出現的問題
網上也有很多部落格描述VS下opencv的配置,其實opencv的配置很簡單,但是複雜就出現在你不同情況下配置opencv是有所不同的。
本作者絕對是看了網上幾乎所有的部落格,並且親自配置,且在配置中出現了一個問題,用了整整一天的時間才搞好。
如果你做的專案要釋出,最後肯定要將動態連結庫DLL寫到exe檔案中,這樣才能使你的軟體/系統具有可移植性。
(大家通常在用MFC寫小專案的時候書上/教學視訊一般都是推薦你選擇共享DLL下使用MFC)
以後真正遇到專案時才知道,最後都是要選擇靜態庫下使用MFC的。
稍後我會詳細描述在靜態庫下使用MFC 怎麼去調整opencv的配置
基本的opencv配置可分為以下四步(本文中opencv是安裝在D:\Program Files\opencv)
1.設定系統的環境變數(Path)
計算機->(右鍵)屬性->高階系統設定->高階(標籤)->環境變數->(雙擊)path(使用者,系統裡面的path任選其一)->在變數值裡面新增;D:\Program Files\opencv\build\x86\vc10\bin(注意不同路徑之間有個分號)
x86--------- 代表32位系統
x64---------
代表64位系統
下面是配置系統環境變數的圖
傳圖失敗,請大家見諒哈!
2.設定VS中vc++目錄的包含目錄和庫目錄以及執行目錄
包含目錄中編輯新增如下(這裡面全是放著.h .hpp等檔案)
D:\Program Files\opencv\build\include
D:\Program Files\opencv\build\include\opencv
D:\Program Files\opencv\build\include\opencv2
庫目錄(設定lib檔案的)
D:\Program Files\opencv\build\x86\vc10\lib
執行目錄(設定DLL動態連結庫的,程式要用到的dll檔案)
D:\Program Files\opencv\build\x86\vc10\bin
注意:配置執行目錄和配置VS中的環境變數PATH的效果是等同的,配置一個即可
3.附加依賴項的新增
首先宣告一個opencv的Bug
如果你想你的opencv程式碼在Release和Debug下都可以完美執行這是不可能的!!!
(因為在呼叫依賴項的時候,兩種情況下切換總會出現問題)
迴歸到正題新增附加依賴項
專案---屬性---連結器---輸入--第一行便是附加依賴項
Release下附加依賴項
opencv_calib3d247.lib
opencv_contrib247.lib
opencv_core247.lib
opencv_features2d247.lib
opencv_flann247.lib
opencv_gpu247.lib
opencv_highgui247.lib
opencv_imgproc247.lib
opencv_legacy247.lib
opencv_ml247.lib
opencv_nonfree247.lib
opencv_objdetect247.lib
opencv_ocl247.lib
opencv_photo247.lib
opencv_stitching247.lib
opencv_superres247.lib
opencv_ts247.lib
opencv_video247.lib
opencv_videostab247.lib
debug下附加依賴項
opencv_calib3d247d.lib
opencv_contrib247d.lib
opencv_core247d.lib
opencv_features2d247d.lib
opencv_flann247d.lib
opencv_gpu247d.lib
opencv_highgui247d.lib
opencv_imgproc247d.lib
opencv_legacy247d.lib
opencv_ml247d.lib
opencv_nonfree247d.lib
opencv_objdetect247d.lib
opencv_ocl247d.lib
opencv_photo247d.lib
opencv_stitching247d.lib
opencv_superres247d.lib
opencv_ts247d.lib
opencv_video247d.lib
opencv_videostab247d.lib
謹記:儘量不要將Debug和Release的都新增進去,如果你比較喜歡常用Debug下,你就只新增Debug下的附加依賴項(這點的原因一會兒再說)
到這基本是opencv算是都配置完成了,一般情況下是不會出現問題的,下面列舉一些特殊情況供大家參考
重頭戲來了哈!
1.我每次建立一個專案需要用opencv都需要配置以上這些步驟麼?
當然可以解決不需要,一次就可以成功哈!
開啟你任意的專案,然後按照下圖進入到屬性管理器
2. 一執行自己的程式就提示缺少各種opencv_core230d.dll等檔案
答:這種情況是最容易解決的,肯定是你係統VS中的環境變數PATH(這裡指的是VS中的PATH)/或者執行目錄沒有配置好,這需要配置一個即可哈!
3.怎麼製作一個靜態的opencvDemo?
4.我在自己電腦上寫的軟體(用到oepncv庫的)怎麼在別人電腦上(未配置環境的機子)執行?
5.MFC專案中選擇在靜態庫下使用MFC的話,怎麼配置opencv環境
注意:上面的問題都是一個解決辦法
1.首先,你的lib選擇staticlib
也就是VC++目錄中的包含目錄應該為如下路徑
D:\Program Files\opencv\build\x86\vc10\staticlib
2.然後,屬性頁---配置屬性----MFC的使用---在靜態庫下使用MFC
這樣會將你程式用到的一些庫寫到你的exe檔案中,換來的是可移植性,但是exe檔案會稍微大一些哈!這是沒辦法的,因為你要將你程式用到的一些庫寫到裡面,自然就大了哈!
3.再然後,屬性----C/C++ -----程式碼生成----執行庫選擇位多執行緒除錯(/MTd)
如果出現錯誤的話就換其他執行庫方式(不出意外的話應該是這樣哈)
在靜態庫下會出現這種異常錯誤
windows已在xx.exe中觸發一個斷點,其原因可能是堆被損壞,這說明xx.exe中或它所載入的任何DLL中有bug。
原因也可能是使用者在xx.exe具有焦點時按下了F12。
輸出視窗可能提供了更多診斷資訊 。
解決辦法
1.確實是你程式錯誤,如果程式錯誤最有可能是你new的指標沒有delete,或者某個記憶體沒有分配就開始用再或者就是野指標等情況,最好單步除錯,注意指標和陣列,應該不難查出來錯誤哈!
2.就是opencv的配置錯誤
我在配置好opencv後發現我的程式在共享DLL下使用MFC是沒有錯誤,但是一旦選擇了靜態庫下使用MFC就出現了上面的錯誤
開始我也認為是指標的問題,可我單步調後感覺不對,所以又從配置上下了功夫,是一篇部落格中的一句話提醒了我
Debug下面可能引用了Release下面靜態編譯的庫。
因為我開始將所有的dll都新增到了附加依賴項,我是在Debug下進行除錯的,同時又選擇了靜態編譯,所以這些附加依賴項裡面還有Release的dll,而我的程式碼就是引用了這些靜態編譯的庫才會出現的問題,我隨即將Release的dll從附加依賴項中去除,馬上就好了哈!
-----以上就是自己在配置opencv的一些問題,歡迎大家補充,凡是有opencv配置方面的問題,請評論我會盡自己所能來解決哈!---
相關文章
- OpenCV-android-sdk 配置以及使用(Java)OpenCVAndroidJava
- 微服務上 AWS 雲, 在使用ALB 的情況下, Eurek 中如何配置微服務
- Linux下安裝並使用Java開發opencv的配置LinuxJavaOpenCV
- Qt釋出opencv的工程需配置的lib,dll和include等QTOpenCV
- OpenCV+QT5在Window下的環境配置記錄OpenCVQT
- 四種AD安裝的情況以及配置方法
- MFC 程式基本介面配置
- ubuntu 下配置靜態IPUbuntu
- Yii框架在Nginx下的rewrite配置(偽靜態配置)框架Nginx
- 在這種情況下如何節約記憶體使用?記憶體
- windows下基於cmake配置opencv並使用visual studio編譯WindowsOpenCV編譯
- OpenCV在iOS中的安裝與環境配置(1)OpenCViOS
- Linux下的共享庫(動態庫)和靜態庫Linux
- qtCreator中配置opencv和mingwQTOpenCV
- Redis 哨兵使用以及在 Laravel 中的配置RedisLaravel
- Duilib的使用(優化MFC介面)之 配置專案屬性UI優化
- PHPUnit 在 Windows 下的配置及使用教程PHPWindows
- JavaCV與OpenCV的區別和使用中遇到的問題JavaOpenCV
- cmake配置VS工程配置使用dll
- Ubuntu下遠端配置靜態IPUbuntu
- oracle11g在沒DNS情況下failover的配置方法OracleDNSAI
- 配置QT Mingw & opencvQTOpenCV
- Chrome還會在以下這兩種情況下顯示“Not secure”警告……Chrome
- 如何在opencv下使用SIFTOpenCV
- Linux CentOS 配置靜態 ip 和 解決 配置後無法聯網的問題LinuxCentOS
- Mac下Sonar Swift的配置使用MacSwift
- 【OpenCV】OpenCV中GPU模組使用OpenCVGPU
- Mac下配置環境變數的兩種方式Mac變數
- plsql以及instantclient下載安裝配置使用SQLclient
- Linux下靜態庫的生成以及使用例項圖解Linux圖解
- AIX中YUM庫的配置和使用方法AI
- apktool的下載配置及使用APK
- 使用rollup打包庫的一種基本配置
- windows環境下go module的使用和goland配置WindowsGoLand
- 在android上使用opencv的ocl模組遇到的問題(一)AndroidOpenCV
- 在AndroidStudio下使用cmake編譯出靜態連結庫的方法Android編譯
- Qt5.12配置OpenCV教程QTOpenCV
- 在SDK程式中使用MFC中的輔助類 (轉)