2010-01-26 25 views
4

我從硬件供應商處獲得了一個.h文件,兩個.lib文件,一個.dll文件和一個小型測試項目,以便與他們的硬件通信。何時包含.lib以及何時包含.dll或兩者兼有

編譯和運行他們的測試項目工作得很好。值得注意的是:他們不使用.dll。我可以扔dll目錄和所有的內容,一切正常。

爲了開始,我簡單地將他們的代碼的通信部分(連接,斷開連接併發送命令)複製到我的項目中。這實際上是你可以做的所有事情。我已經包含.h文件並指向包含.lib文件的目錄。就像在微小的測試項目中一樣。這一切都編譯,但是當我嘗試運行該項目抱怨說它缺少.dll文件。

任何人都可以解釋發生了什麼嗎? libs和dll應該如何工作?

所有這些都在windows,VS2005上。我比較了.vcproj文件並找不到任何重大差異。

+0

我會試着在stackoverflow.com上詢問這個問題,它更適合編程相關的問題。 – Kez 2010-01-26 10:24:15

+0

將DLL放在與您的可執行文件相同的目錄中 – 2010-01-26 10:40:33

+0

我不明白這是如何回答我的問題的。你能解釋一下嗎? – AnnaR 2010-01-26 11:20:02

回答

2

測試項目是statically鏈接 - lib包含在exe中。

您的項目是dynamically鏈接 - dll被引用,因此在運行時需要。

有關更多信息,請參見此Stack Overflow question

+0

在VS中,我是否需要一個靜態(或動態)鏈接的項目? – AnnaR 2010-01-26 13:15:43

+0

您需要在創建項目時進行設置。可以更改它,但涉及編輯項目文件。 – ChrisF 2010-01-26 13:32:08

+0

當然!我會很樂意編輯項目文件!我只需要知道要改變什麼。 – AnnaR 2010-01-26 14:00:29

2

基本上,答案取決於您是否要爲可執行文件使用靜態或動態鏈接。

使用靜態鏈接,您需要.h和.lib文件,但不需要.dll文件來編譯和鏈接。您的可執行文件將更大,但在運行時不需要任何.h/.lib/.dll文件。

通過動態鏈接,您只需要.h文件進行編譯和鏈接。您的可執行文件會較小,但在運行時需要一個或兩個.dll文件。

對於這個從Visual Studio透視的更詳細的處理,檢查出http://msdn.microsoft.com/en-us/library/1ez7dh12.aspx -

「動態鏈接從靜態鏈接,它允許一個可執行模塊的不同(一個.dll或.exe文件)只包含運行時需要的信息來定位DLL函數的可執行代碼,在靜態鏈接中,鏈接器從靜態鏈接庫中獲取所有引用的函數,並將其與代碼一起放入可執行文件中。