各種方法配置 Visual Studio 第三方庫
配置第三方庫如Opencv,或者軟體開發商提供的SDK時,一般需要配置三個檔案:
標頭檔案(.h),引入庫(.lib)檔案(也稱“匯入庫檔案”),動態連結庫(.dll)檔案
下面以度申科技的相機sdk配置為例,簡述一下這三個檔案的配置方法。
在開發過程中筆者參考了幾篇部落格,最後在廠商技術人員的幫助下,終於弄清楚了第三方庫的配置方法,在此表示感謝。
參考文章:
關於屬性表可參考下面文章:
1.配置標頭檔案的方法
1)在屬性表中新增附加包含目錄絕對路徑。
2)在屬性表中新增附加包含目錄相對路徑
上圖中的路徑是SDK的安裝路徑,即絕對路徑,如果想一勞永逸,比如想讓這個專案資料夾拷貝到其他沒有裝SDK的機器上仍能夠執行,就把.h檔案直接拷貝到專案路徑下。這時候就要設定標頭檔案的相對路徑,來個例子:
標頭檔案目錄如下:
屬性表中設定的相對路徑如下:
VS會在專案路徑下搜尋include資料夾,之後按照配置的相對路徑就能找到標頭檔案。
3)在專案標頭檔案中直接用include語句引入,無需配置屬性表
絕對路徑表示如下:
相對路徑表示如下:
#include "../../../library/Visual C++/include/DVPCamera.h"
其中一個"..\"表示一個上一階目錄,有三個"..\"表示當前目錄再往前三個目錄,所以他的意思就是呼叫當前目錄再往前三個目錄下的inclued資料夾中的標頭檔案。標頭檔案實際的路徑是
D:\Program Files (x86)\DVP2 SDK\library\Visual C++\include
專案目錄為
D:\Program Files (x86)\DVP2 SDK\Sample\VC++\MultipleCamera
因此從MultiCamera向上三層是DVP2 SDK,所以從DVP2 SDK目錄下的library中層層向下找到目標標頭檔案。這種寫法是因為sdk會被安裝到那個目錄下是不確定的,但是sdk目錄之間的層級關係是固定的。
下面的情況相對路徑可表示為(MultiCamera為專案目錄):
#include "include/subdirectory/DVPCamera.h"
也可以寫作
#include "include\subdirectory\DVPCamera.h"
實際測試發現include語句中‘\’和‘/’沒有區別,都能通過編譯。
2、引入庫.lib檔案配置方案
與標頭檔案配置類似,引入庫也分相對路徑和絕對路徑。
1)在屬性表中新增附加庫目錄和庫檔名稱
絕對路徑:
相對路徑:
其中一個"..\"表示一個上一階目錄。
新增lib檔名:
在連結器-輸入-附加依賴項中新增檔名即可。
2)在專案cpp檔案中直接用#pragma comment語句引入,無需配置屬性表
使用語句新增引入庫的好處就是無需配置多個屬性表,
不管是debug模式還是release模式,不管是64位還是32位,幾行程式碼通吃。
相對路徑:
#ifdef _M_X64 #pragma comment(lib, "../../../VC++/DVPCamera64.lib") #else #pragma comment(lib, "../../../VC++/DVPCamera32.lib") #endif
絕對路徑:
#ifdef _M_X64 #pragma comment(lib, "D:/Program Files (x86)/DVP2 SDK/library/Visual C++/lib/x64/DVPCamera64.lib") #else #pragma comment(lib, "D:/Program Files (x86)/DVP2 SDK/library/Visual C++/lib/x86/DVPCamera.lib") #endif
此處注意,直接從位址列複製的路徑中分隔符是‘\’,而comment指令中的分隔符是‘/’,需要做一下修改,否則會報錯。
或者也可以用‘\\’,即
#pragma comment(lib, "D:\\Program Files (x86)\\DVP2 SDK\\library\\Visual C++\\lib\\x64\\DVPCamera64.lib")
另外,如果你使用了#pragma comment 語句,記住把屬性表裡的配置項刪除掉。
如果使用了#pragma comment 語句,但是屬性表裡lib庫只給了檔名而配置給庫路徑,也會報錯。
兩者是在編譯連結時系統都會查詢的,任何一個有問題就會報錯。
3、動態連結庫檔案
根據文章:
在程式執行時系統會自動搜尋相應的dll檔案,搜尋的順序依次分別為: 1、程式的執行目錄(exe目錄) 例如:F:\VC++\SourceCode\Lesson19\Dll1\Dll1\debug 1、當前目錄; 例如:F:\VC++\SourceCode\Lesson19\Dll1\Dll1 2、系統目錄; 依次是:C:\WINDOWS\system32;C:\WINDOWS\system;C:\WINDOWS 3、path環境變數中所列出的路徑。
最穩妥的方式就是把dll檔案放到專案目錄Debug或Release資料夾下,而且不能有子目錄。下面這種方式就是把dll檔案放到子目錄下,結果會報錯。
否則會報錯如下: