OpenCV3.42+VS2017配置+模組計算機型別“X86”與目標計算機型別“x64”衝突”的問題解決
目錄
OpenCV3.42+VS2017配置
下載 opencv-3.4.2-vc14_vc15.exe 解壓縮。
1.安裝:
雙擊開啟下載好的opencv-3.1.0.exe檔案,進行安裝(其實是解壓)
安裝完畢之後,在其安裝目錄下可以看到兩個資料夾:build和sources,其中build是OpenCV使用時要用到的一些庫檔案,而sources中則是OpenCV為我們提供的一些demo示範原始碼:
2.環境變數配置:
上面步驟只是完成了安裝,但是要能夠正常使用OpenCV來進行開發,我們還需要進行環境變數的配置,我的電腦—>屬性—>高階系統設定—>環境變數,找到Path變數,選中並點選編輯:
64位系統的需要在path新增“;opencv安裝路徑\build\x64\vc14\bin”(注:英文輸入法中的“;”是分割符,用於與前面其他軟體的配置引數分開),例如我的配置引數應該為:;E:\OpenCV\opencv\build\x64\vc14\bin。在之前的opencv版本中的配置時,32位系統應配置路徑“;opencv安裝路徑\build\x86\vc14\bin”,但是3.1.0版本的OpenCV已經將x86這個目錄刪除了,也就是說在VS 2015環境下不能進行32位的OpenCV編譯。
還有一個要注意的就是x64資料夾下分為vc12和vc14兩個資料夾,他們對應於VS的版本,例如VS2013應使用vc2012,而這裡我們使用的是VS 2015,所以應該使用vc14檔案目錄:
補充:vc8 = Visual Studio 2005,vc9 = Visual Studio 2008,vc10 = Visual Studio 2010,vc11 = Visual Studio 2012,vc12 = Visual Studio 2013,vc14 = Visual Studio 2015
注意:環境變數配置完畢之後,需要重啟電腦才能生效!
3.VS 2015配置:
我們知道要在VS中使用外部的類庫的話,需要進行引入的一下配置,這個配置就包括:外部庫目錄指定和外部包含檔案指定。
開啟VS 2015,新建一個空白的win32的控制檯工程:
選擇語言為C++,Win32型別中的控制檯工程,並設定工程名稱:
指定建立的工程為空白工程:
建立完工程之後,我們選中解決方案欄中的Resource Files目錄(即原始碼目錄),然後新建一個C++原始碼檔案:
設定原始碼的檔名,例如:Main,然後建立此原始碼檔案到工程中:
在VS中有個叫做“屬性管理器”的工具,用於進行VS整體引數的配置,配置一次之後,以後所有新建專案都能應用改配置,不用再一一進行配置操作,使用起來也非常方便。點選工具欄中的:View—>Other Windows—>Property Manger開啟屬性管理器:
在新出現的屬性管理器欄中,展開目錄,選中Debug|Win64中的Microsoft.Cpp.x64.user,並右鍵點選屬性(Properties)進入屬性介面:
1)配置包含目錄:
在通用屬性(Common Properties)—>VC ++目錄—>包含目錄,然後點選右側三角標誌選中Edit進入編輯:
向其中新增下面三個路徑:
E:\OpenCV\opencv\build\include
E:\OpenCV\opencv\build\include\opencv
E:\OpenCV\opencv\build\include\opencv2
2)配置庫檔案目錄:
完成上面的包含目錄配置之後,我們還需要進行庫檔案的配置:回到屬性介面,選擇包含目錄下面的Library Directories(庫檔案目錄):
向庫檔案目錄下新增OpenCV的庫檔案目錄:E:\OpenCV\opencv\build\x64\vc14\lib,這個目錄根據每個人自己在第一步安裝OpenCV中選擇的目錄進行選定:
3)配置動態連結庫:
我們可以檢視步驟2)中新增的庫檔案目錄下面.lib檔案列表,發現在3.1.0版本的OpenCV中,僅剩下兩個庫檔案,分別是:opencv_world310.lib和opencv_world310d.lib,這裡兩個庫檔案的區別就是:opencv_world310.lib是Release模式版本,而opencv_world310d.lib是Debug模式版本:
跟上述兩個步驟相似,在屬性介面中開啟Linker(連結庫)—>Input(輸入)—>Additional Dependencies(新增依賴):
將我們剛剛在OpenCV庫檔案目錄下看到的兩個庫檔案其中一個新增到這裡(根據模式需求Release模式或Debug模式):
其實,對已經發行和未來即將釋出的新版OpenCV,只需看opencv\build\x86\vc10\lib下的庫是哪幾個,新增成依賴項就可以了。
三、實踐:
在完成了上述所有配置工作之後,我們需要進行一次實測,用於驗證以上配置是否成功。這裡我們的測試demo功能很簡單,就是在一個視窗中顯示我們指定的一張圖片。在之前的Main.cpp檔案中新增以下程式碼:
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main(){
// 讀入一張圖片(遊戲原畫)
Mat img = imread("pic.jpg");
// 建立一個名為 "遊戲原畫"視窗
namedWindow("遊戲原畫");
// 在視窗中顯示遊戲原畫
imshow("遊戲原畫", img);
// 等待6000 ms後窗口自動關閉
waitKey(6000);
}
將圖片pic.jpg複製到工程目錄下面,與原始碼位於同一目錄:
執行工程,假如一切都正常的話,會出現如下結果:
Visual Studio 2017 第三方依賴設定,附加依賴項和附加庫目錄
Visual Studio 2017 第三方依賴。需要做的事情有:1、指定標頭檔案所在目錄。2、指定需要使用到的lib。3、指定lib資料夾,也就是程式碼的實現部分所在的目錄。
附加依賴項 是指輸入項,如某個.LIB檔案。
附加庫目錄 是你用 #pragma comment(lib,”a.lib”)的時候;此時就搜尋相應的庫目錄,直到找到a.lib檔案。
附加依賴項和附加庫目錄最直觀的區別是:前者新增的是檔名比如a.lib,而後者是路徑。
新增到附加依賴項 :LIB檔案被真正包含進來了。
把它所在的目錄新增到附加庫目錄裡面 :僅僅包含目錄只是告訴IDE,搜尋沒有指定路徑的庫檔案時,也搜尋這裡。
所以,這裡存在一個先後的順序:先查詢所指定的lib附加依賴項,如果沒有找到,就從附加庫目錄中搜索。從目錄中搜索所花費的時間是比較長的。
下面是具體的設定方法:
1、新增工程的標頭檔案目錄:
工程---屬性---配置屬性---c/c++---常規---附加包含目錄:加上標頭檔案存放目錄。
對應相應的標頭檔案夾(include資料夾),裡面存放的是.h標頭檔案;
專案名右鍵 -- properties -- c/c++ -- General -- Additional Include Directories
2、新增檔案引用的lib靜態庫路徑:
工程---屬性---配置屬性---連結器---常規---附加庫目錄:加上lib檔案存放目錄。
對應本例中的lib資料夾。裡面存放的是.lib檔案;
專案名右鍵 -- properties -- Linker -- General -- Link Library Dependencies
3、然後新增工程引用的lib檔名:
工程---屬性---配置屬性---連結器---輸入---附加依賴項:加上lib檔名。
專案名右鍵 -- properties -- Linker -- Input -- Additional Dependencies.
第四步:開啟VS2012新建一個工程,然後找到屬性管理器,點選Debug欄目,右鍵新增新專案屬性表,並且進行相關命名,因為以後會反覆用到這個東西,所以名字要特別一點。
Release模式和Debug模式差不多,只不過在新增附加依賴項的時候,將附件依賴項的檔名後面的“d”給去掉。
現在我們再討論一下fatal error LNK1112: 模組計算機型別“X86”與目標計算機型別“x64”衝突問題的解決:即我們需要再64位環境下編譯執行,但是出現這個問題。
首先要確保這兩個地方沒有問題:
1:專案解決方案——屬性——聯結器——高階——目標計算機,看目標計算機是否是MachineX64,不是的話更改為。
2:配置管理器——新建(有的話直接選擇)x64
這兩個搞定之後,試一試能不能跑,不能跑的話,我們回到剛剛設定建立的OpenCV屬性表當中,注意是修改DebugX64位下面的屬性表,將我們的庫目錄的路徑更改一下,
將原來的 C:\opencv\build\x86\vc11\lib 改為 C:\opencv\build\x64\vc11\lib,這樣基本就沒問題。Relaese方面一樣。