2010-04-28 84 views
48

在編譯和鏈接之間的區別,有什麼用.EXP的? .lib和.dll有什麼區別?我知道.lib將被使用,而鏈接和.dll將在運行該程序時使用。但.lib和.dll究竟有什麼區別?什麼是使用.EXP的,是什麼樣的.lib和.dll

難道的.lib文件不包含從.dll文件來的函數的代碼? 使用兩個單獨文件需要什麼?

請說明。在此先感謝

回答

71

在DLL的導入庫的情況下,.lib文件確實而不是包含任何實際的代碼。它基本上只包含關聯DLL中的函數列表 - 足以讓鏈接器將對該DLL的引用嵌入到與庫鏈接的某些內容中,但不包含其他內容。

一個文件.exp是一個導出文件 - 基本上半斤八兩作爲的.lib文件。當你有循環依賴時,它至少被用於(至少主要)。例如,假設您有一個充當可執行文件插件的DLL。可執行由DLL插件提供用於一些導出的函數,但還需要能夠調用在插件一些功能,以及(例如加載和初始化一個插件)。

的DLL不能鏈接到可執行文件是建立在提供的.lib文件 - 但可執行文件不會鏈接到該DLL是建立在提供的.lib文件。爲了打破依賴,你對運行可執行文件,它失敗(因爲它無法找到該DLL中的.lib文件)的鏈接,但產生.EXP文件。然後,您將DLL與可執行文件的.exp文件鏈接起來。然後,您可以使用DLL的.lib文件重新運行鏈接以生成可執行文件。