visual studio 2012 下配置OPENcv3.1 和CMAKE問題總結
visual studio 2012 下配置OPENcv3.1 和CMAKE問題總結
作為一個CMAKE的新手,在搭建環境的時候確實廢了很多功夫,所以總結一下自己的過程,希望隊大家有所幫助。
在開始之前有幾點需要強調:
1. 首先一定要確定好自己的電腦到底是32位的還是64位,下載cmake是要看清楚,低版本的cmake不區分,高版本的開始分WIN32和WIN64.
2. 不論是編譯過程還是工程的生成過程,一定要注意所選的平臺與自己的電腦配置相同.
3. 安裝過程中要細心細心再細心。
當然,錯誤有時候無法避免,這時候要有針對性的查詢資料,一種方法不行要果斷換另一種方法,實在不行,就卸掉重新裝(我指的是opencv和cmake,visualstudio 就算了。。。)
首先,我整個的配置過程都是參考的博文http://www.cnblogs.com/jliangqiu2016/p/5597501.html,所有的過程都很詳細,這裡就不再贅述,主要說一下自己所遇到的問題。
1. ffmpeg.dll和ffmpeg64.dll的hash值錯誤問題,主要原因是cmake是外網,不好下載,這裡參考的是博主http://blog.csdn.net/kelvin_yan/article/details/53635641的做法,單獨下載這兩個檔案後放到相應的目錄裡,都可以成功,但是.cmake檔案那步我實在是沒弄懂,到現在也沒有解決,但是沒關係,因為ffmpeg主要對視訊進行分析,不著急做視訊的可以跳過這一步,開啟cmake.gui,找到WITH_FFMPEG把這項去掉即可;
然後就是下載ippicv,按照博主的方法也可以解決。
2.到這時候基本上第一次編譯就可以順利完成了,然後新增modules路徑後進行第二次編譯,這一次編譯時我遇到了另一個錯誤:
cmakeError at cmake /opencvModule.cmake: Syntaxerror in cmake code at:C:/program files/opencv/source/cmake/opencvmodule.cmake when parsing string C:.......
Invalid escape sequence \P.
主要就是說遇到語法錯誤,也百度很多,發現大家的錯誤都是在用VC++開始編譯程式的時候遇到的,只有我的是在cmake搭建環境時,最後在Stake Overflow上找到解決方案,主要是填寫MODULE路徑時出了錯,這一步一定不要在資料夾裡重複制路徑,因為直接複製過來的是向後的分隔符"\",實際上應該是向前的“/”,最好雙擊空白處,點選“···”一步步選擇資料夾的新增,或者注意與上一行路徑格式一致就行。
果然,改完“/”,問題就解決了。
3.第二次編譯完成,接下來可以在VS裡開啟opencv.sln工程進行編譯生成Debug和Release庫了。
這個時候就遇到了另一個問題,即模組計算機x64與目標計算機x86不匹配。
針對這個問題網上給了很多解決方法,大概看一下那些方法:
1.在控制面板中點選解除安裝---visual studio2012---更改---修復,目的主要是新增x64的編譯器;
2.在配置管理器中增加x64版本
這些都是基本的方法,如果你遇到了這個問題可以按照這些方法都來一遍,我就是這樣,但沒有解決掉,我出現這個提示主要是因為在cmake配置是選擇出錯。
cmake第一次編譯的時候需要選擇visual studio的版本,如果你的電腦是32位的那就選visual studio 11 2012 ,但如果你的是64位的一定要選擇
visual studio 11 2012 (Win64),其他版本的也是如此,因為cmake需要的庫必須都是在同一環境下生成,如果你需要64位的環境進行debug,你的cmake庫就必須也是在64位visual studio的環境下生成的,這點很重要。
如果你已經選錯了也不要著急,把opencv 和opencv_contrib 兩個檔案都刪掉,在重新進行開啟cmake.gui 進行編譯,這時候按照自己的系統再重新選擇VS環境即可。
4.編譯opencv.sln時出現:
無法開啟opencv_bioinspired310.lib的問題,這個問題主要是因為cmake版本過高,當然也可能是VS 版本太低,我原先的是cmake3.7 和VS 2012,編譯時有這個問題,後來換cmake3.6後還有這個問題,直接換成cmake3.4,問題就解決了。 這裡需要注意3.4的cmake沒有專門的64位版本,下載32位的就可以,只要記得在選擇VS環境的時候選擇Win64 即可。
5.與問題4同時出現的還有一個問題:C:\.....\Microsoft.CppCommon.targets(172.5):errorMSB6006:"cmd.exe"已退出,程式碼為:-1073741571. 這個問題在編譯時一起出現,但在更換cmake版本後也就沒有了。 (tips: 因為編譯opencv.sln的檔案過多,而且一般還會有很多警告,如果有錯誤的話很難發現,這個時候,大家可以將輸出的那些命令一起復制到WORD裡,然後查詢Error這個單詞,錯誤就可以出現啦!!)
6.一切都弄好後開始試著執行,結果剛開始是無法開啟core.hpp,一般這種情況都是庫目錄和包含目錄沒有新增對,我看網上的攻略,邊看邊檢查,發現沒有錯誤,很納悶,後來果斷關掉VS,重新開啟,又重新配置庫和包含目錄,這個問題就解決了,感覺有時候軟體開啟時間久了,可能是我切換的工程數量太多了,互相之間有些混亂。反正一般這種問題主要就是核對目錄什麼的。
7.最後一個問題:丟失檔案opencv_core310.dll
這個問題很怪,我建立了三個工程,都配置了同樣的庫目錄和包含目錄以及附加項,而且是同樣的程式,在工程A裡可以執行,在B和C都不可以,提示都一樣。遇到這種問題,首先要檢查自己的電腦中是否存在這個檔案,我搜索後發現這個檔案在我的電腦裡的兩個位置都有,一個是opencv原來的自帶bin裡,一個是後來配置的opencv_contrib的install檔案,把這兩個位置都新增到環境變數的PATH裡,然後重啟電腦,(如果不重啟,環境變數無法真正新增到VS裡,直接執行工程一般還是會出錯),就沒有問題啦!!
以上就是我目前為止遇到的問題了,目前OPENCV是沒有問題了,但感覺像博主我在這麼馬虎的人,未來的程式設計路似乎會走的很艱難啊~~~~~~
歡迎大家修改指正,以及留言討論,我好熱心的!!!! XD