2010-04-28 46 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文件重新运行链接以生成可执行文件。