2010-02-10 65 views
4

使用visual studio 2008,我有一個庫的.H和一個.LIB文件。 我編寫了一個程序,並通過項目屬性引用了LIB。 它編譯得很好,但是當它運行時,它會要求安裝DLL。 如果DLL與EXE在相同的目錄中,它可以工作......但是,如果我有LIB,它是不是意味着這些函數是靜態鏈接到我的程序的?c靜態鏈接到lib並仍在請求DLL

感謝

+0

檢查http://stackoverflow.com/questions/3573475/how-does-the-import-library-work-details – 2016-09-08 22:56:36

回答

10

並非所有lib文件是靜態庫。有些是進口圖書館,而且有機會,那就是你連接的東西。

如果您的lib文件比其對應的dll文件小得多,這肯定表明它是一個導入庫。

+3

您也可以在.lib文件上運行'dumpbin/exports',如果你最終得到了庫中所有函數的列表,那麼它就是一個導入庫。 – 2010-02-11 01:41:35

+4

'lib/list'也很有用。如果你只看到'.obj'引用,那麼它只是靜態的。如果它只有'.dll',那麼它只是一個導入庫。注意:'.lib'文件可能都是。 – 2010-11-16 15:23:29

7

讓你的程序使用一個DLL需要一個導入庫。它是一個擴展名爲.lib的文件,就像靜態的.lib文件一樣。但它非常小,它只包含由DLL導出的函數列表。鏈接器需要這樣才能將DLL的名稱嵌入到導入表中。您可以通過在您的.exe文件上運行Dumpbin.exe/imports來查看此文件。