2012-11-01 142 views
6

因此,我有一個包含3個項目(2個DLL和1個.exe)的C++解決方案。DLL Project不會生成.exp和.lib文件

這裏是基本的依存關係表示:

應用程序 - > DLL2

應用程序 - > DLL1

DLL2 - > DLL1

我的問題是,DLL2(當構建它)確實會生成.dll,但不生成.lib和.exp我需要在應用程序項目中正確引用DLL2。但是,DLL1確實會生成這些文件,並且我已經將DLL1的設置與DLL2進行了比較,並且我找不到可能的區別。

回答

4

問題是,DLL2只有.h文件,並且沒有任何關聯的.cpp文件中的內容。所以IDE沒有看到創建.lib文件的必要性。

+0

感謝這個答案幫助我。還必須添加至少一個'static __declspec(dllexport)'方法來使'lib'文件出現 – javapowered

9

對此的簡單解釋是,您只是忘記了導出任何內容。如果沒有導出,鏈接器不會創建.lib/.exp文件。您可以通過在DLL上運行dumpbin.exe /exports來驗證這一點。期待你什麼都看不到。使用__declspec(dllexport)從DLL中導出符號。或者一個.def文件。

+0

並記住包含定義通常導出宏的頭文件。 :) –

0

我剛剛發現了另一種導致同樣事情發生的方法。我將一些例程作爲另一個DLL中的服務例程開發並測試到它們自己的DLL中。由於此舉是在編寫第一行代碼之前計劃的,因此它們未標記爲導出,因此使用該項目的默認調用約定__cdecl。當我構建庫時,構建環境不會創建.LIB文件。經過一番調查,並受到本主題中提及的__declspec(dllimport)的啓發,我意識到,儘管我將聲明移動到由New Project Wizard生成的模板頭文件中,但我忘記插入生成的調用約定的名稱宏成原型。

使用指定的調用約定,在包含實現的頭文件和CPP文件中,我都得到了預期的.LIB文件。

相關問題