2013-07-12 61 views
1

我正在使用Visual Studio 2008試圖創建一個.dll。該DLL使用外部庫(.lib)。編譯和鏈接工作正常(我在選項中包括頭/ lib的路徑)。當我的.dll被一個程序使用(作爲一個插件)它說「externalLibrary.dll丟失」,但沒有externalLibrary.dll,只是一個externalLibrary.lib。在.dll中包含.lib,程序將其用作插件

是否有不同的鏈接選項(所以externalLibrary已經在我的.dll中)?或者我可以簡單地從.lib創建一個.dll文件?或者解決這個問題的其他解決方案?

編輯(更具體): 在項目屬性我增加

  • 頭路徑@ C/C++ - 常規 - 附加包含目錄
  • 庫路徑@接頭 - 通用 - 附加庫目錄
  • 庫名@鏈接器 - 輸入 - 附加依賴(雖然這 不會改變任何東西)

回答

0

您正在使用的.lib文件是一個導入庫,它基本上意味着它僅包含函數/類/的存根(stub),但不包含實際的implmentation。該實現是在DLL中。導入庫僅用於鏈接器,因爲它使用它來解析符號。但是在運行時,需要實際編譯的代碼,以便您的應用程序/ dll查找該dll。但即使你的dll被用作插件,它依賴於其他dll也沒有問題。所以如果你有其他的DLL,我建議你這樣做。 (什麼是'externalLibrary'btw ?,這是不正常的供應商提供你只有一個導入庫,而不是DLL)

如果你真的不想使用外部的DLL,你必須找到用於'externalLibrary'的代碼的靜態庫。與導入庫不同,靜態庫確實包含了所有符合實際實現的符號等。因此,在與靜態庫鏈接後,您的應用程序/ dll將包含代碼本身,並且無需在運行時解析它。

+0

愚蠢的我...感謝您的回答/解釋 - .dll被放置在不同的位置(之前沒有考慮過搜索dll,因爲我認爲lib已經足夠了) –

相關問題