下面內容為不同系統和不同版本VS+不同版本OpenCV之間進行配置時的注意事項。本教程中開始提到如果VS版本和OpenCV版本相匹配的話,只要按上述步驟配置都是沒有問題的。但是如果說版本不匹配的話,就會出現問題。
什么是版本不匹配呢,在D:\OpenCV244\opencv\build\x86,(不同解壓路徑位置不同)
有vc9和vc10和vc11這三個東西,或許你會發現在OpenCV相應的目錄下是沒有vc11這個東西的,vc11是屬於VS2012的編譯器部分,也就是說在OpenCV243里是不正式支持VS2012的,在OpenCV244里才開始正式支持VS2012,vc10則是屬於VS2010的編譯器部分,而無論是244還是243里面都有vc10,所以如果你用的是VS2012以下版本的話,是不會出現OpenCV和VS不匹配的問題。網上的教程都是在VS2010下配置的OpenCV243,所以這樣是不會出現版本不匹配問題的,只要按照步驟配置那四個部分就好了。
但是,如果你要配置的工作環境是VS2012,然后又是OpenCV243,如果你按步驟把四個部分都設置好了,那會出現什么問題呢,編譯是可以編譯的,但是在執行的話會提示缺少MSVCP100d.dll,這個dll是什么呢,這個dll是屬於支持VS2010部分的,所以,我們需要找到MSVCP100d.dll這個文件,你可以從網上搜索,也可以直接從裝有VS2010的電腦上直接復制一份。然后把MSVCP100d.dll復制到system32目錄下,並注冊,重新運行程序,不會再提示缺少MSVCP100d.dll,但是又出現了一個問題,缺少MSVCR100d.dll,同樣,和上面步驟一樣,注冊好之后再一次運行程序,恭喜你,這次可以了。
http://www.verydemo.com/demo_c131_i4072.html,這是VS2012+OpenCV243的配置,里面有提到上述問題,雖然網頁是英文的,但是都很簡單,讀完就理解了。
筆者的第一次配置環境就是這樣的,VS2012+OpenCV243,搞了好幾天才搞定,我是把所有出現的情況都設置了,包括cmake,包括各種路徑,包括把1.0和243的dll都復制到system32下,當然也包括上述所說到的MSVCP100d.dll和MSVCR100d.dll,最后也是稀里糊塗的配置好了,根本不知道那些配置都是干什么的。
可是,后來筆者實驗室換了電腦,筆者裝了64位的系統,再一次進行配置,同樣出現了以上問題,最后也是把MSVCP100d.dll和MSVCR100d.dll復制到system32,但是這次卻不行了,提示MSVCP100d.dll的版本不兼容,這是因為我的系統是64位的,上次的dll不能用,這下郁悶了。后來無意間發現OpenCV244正式支持VS2012,於是,我果斷換了OpenCV244,然后把那四個地方都配置好了,一次就能運行了,沒有提示MSVCP100d.dll和MSVCR100d.dll的問題。
在這里說一下系統的位數問題,其實,OpenCV完全不用考慮系統位數問題,因為它里面都帶着了x86(32位)和x64(64位),主要是VS安裝文件的位數問題,如果你的VS安裝文件是32位的,那你就按32位的來配置,即選擇x86的文件,和你的電腦系統是多少位的沒有關系,即使你的系統是64位的,但是它肯定是向下兼容32位的,如果VS的是安裝文件64位的,就選擇x64的文件。如果你的電腦系統是32位的,那就只能裝32位的VS了,它是不能向上兼容的。
所以,綜上,如果說OpenCV的版本是最新的,即244,那么無論你是什么版本的VS,只要按步驟配置都沒有什么問題,但是如果不是最新的,即OpenCV244,同時你的VS又是最新的2012,那么就會出現上述的問題。所以比較好的方法就是裝最新的OpenCV,使用比較老的VS,比如說VS2005,2008或者2010,而且,我們大可不必擔心OpenCV什么時候不再支持老版本VS,像忽略支持VC++6.0那也是在很長一段時間之后才不再支持的。
筆者沒有VS2012和OpenCV244的下載鏈接,如果大家有需要的可以向筆者索要,包括MSVCP100d.dll和MSVCR100d.dll。
好了,以上就是本教程的全部內容,系統地講了VS和OpenCV配置的問題。如果大家以后在配置工作環境這一塊有什么問題,我能解決的盡量幫助。很榮幸也很開心能夠得到冷月哥的賞識,提升我為YY群的管理員,既然成為了管理員,也有了一定的責任,這算是自己為計算機視覺群盡的一點綿薄之力吧。另外,感謝廣州-M-伍兄和長春|F-舞雨妹子提示我作這樣一個教程。最后,祝大家生活快樂,學習進步。
FreeBamb
2015年11月7日
轉載請注明出處。