VS和opencv的一些坑

  • VStudio中Debug版本庫和Release版本庫使用問題
    • VS中調用不同版本的(如opencv)庫(debug/release)需要在對應的模式(Debug/Release)環境下進行調用。如在VStudio的debug模式下只能調用debug版本的動態/靜態庫,release模式下只能調用release版本的庫,不可以交叉調用,交叉會報錯。
    • 原因:不同版本的(如opencv)庫其使用的運行時庫不同(release版本的庫使用MD/MT,debug版本的庫使用MDd/MTd),因此由於debug環境的運行時庫(run time 如debug下爲msvcp140d.dll)無法爲欲調用的庫提供對應的運行時庫版本,所以會報錯。
  • Windows下使用opencv以編譯好的發行版(如下載使用opencv-3.4.3-vc14_vc15.exe)需要注意是在vc的那個VStudio版本下編譯的,調用該發行版opencv庫的VStudio版本要與該與其對應,否則會報找不到對應版本運行時庫的錯。
    • 示例:如opencv-3.4.3-vc14_vc15.exe是在VC++14、15版本下也就是對應到VS2015版本編譯的,其需要msvcp140.dll等運行時庫,如果使用VS2013那麼只有msvcp120.dll而沒有對應版本的msvcp140.dll運行時庫,則會報錯。
    • 原因和解決方法:原因:如上示例所述不同版本的VC對應的運行時庫不同,調不到對應的庫自然報錯。解決方法:1、下載或重新編譯對應VS版本的opencv庫。2、下載對應庫版本的VS
    • 拓展:
      • 1、爲什麼公司內發佈的算法庫不需要考慮什麼版本VS調用的問題,但opencv編譯出來的庫需要考慮?個人猜測是公司發佈的算法庫已經將相應的運行時庫封裝到了算法庫裏,不再需要在庫外調用對應的運行時庫,而opencv發行版沒有對其對應的運行時庫進行封裝,所以需要在庫運行時在庫外調用。
      • 2、VS版本、VC版本、C/C++編譯器版本的對應。VS是對應VStudio的版本,因爲VS可以建立多語言的工程,VC則是VS下對應C/C++環境的版本,而_MSC_VER是VC環境下對應的c/c++編譯器的版本表示。例如目前最新的Visual Studio 2015的Visual C++版本爲14.0,相應編譯器版本_MSC_VER爲1900,更加詳細的個版本對應參照
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章