各種方法配置 Visual Studio 第三方庫


配置第三方庫如Opencv,或者軟件開發商提供的SDK時,一般需要配置三個文件:

頭文件(.h),引入庫(.lib)文件(也稱“導入庫文件”),動態鏈接庫(.dll)文件

下面以度申科技的相機sdk配置為例,簡述一下這三個文件的配置方法。

在開發過程中筆者參考了幾篇博客,最后在廠商技術人員的幫助下,終於弄清楚了第三方庫的配置方法,在此表示感謝。

參考文章:

靜態庫和動態庫的區別,lib文件和dll文件的配置方法_Sean_新浪博客 http://blog.sina.com.cn/s/blog_6dd65c6f0100vveq.html

VS2005 使用/導入lib 、 dll庫 - pacewalker的專欄 - CSDN博客 http://blog.csdn.net/pacewalker/article/details/7236701

關於屬性表可參考下面文章:

OpenCV在Visual Studio中的屬性表配置方法(通用)_百度文庫 https://wenku.baidu.com/view/4eb66733ba0d4a7303763a18.html

 

1.配置頭文件的方法

1)在屬性表中添加附加包含目錄絕對路徑。

Image 1

2)在屬性表中添加附加包含目錄相對路徑

上圖中的路徑是SDK的安裝路徑,即絕對路徑,如果想一勞永逸,比如想讓這個項目文件夾拷貝到其他沒有裝SDK的機器上仍能夠運行,就把.h文件直接拷貝到項目路徑下。這時候就要設置頭文件的相對路徑,來個例子:

頭文件目錄如下:

image

屬性表中設置的相對路徑如下:

image

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語句中‘\’和‘/’沒有區別,都能通過編譯。

image

2、引入庫.lib文件配置方案

與頭文件配置類似,引入庫也分相對路徑和絕對路徑。

1)在屬性表中添加附加庫目錄和庫文件名稱

絕對路徑:

image

相對路徑:

其中一個"..\"表示一個上一階目錄。

imageimage

添加lib文件名:

在鏈接器-輸入-附加依賴項中添加文件名即可。

image

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") 

image

另外,如果你使用了#pragma comment 語句,記住把屬性表里的配置項刪除掉。

如果使用了#pragma comment 語句,但是屬性表里lib庫只給了文件名而配置給庫路徑,也會報錯。

兩者是在編譯鏈接時系統都會查找的,任何一個有問題就會報錯。

3、動態鏈接庫文件

根據文章:

靜態庫和動態庫的區別,lib文件和dll文件的配置方法_Sean_新浪博客 http://blog.sina.com.cn/s/blog_6dd65c6f0100vveq.html

在程序運行時系統會自動搜索相應的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文件放到子目錄下,結果會報錯。

image

否則會報錯如下:

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM