在编译和链接期间,.exp的用途是什么?.lib和.dll有什么区别?我知道将使用.lib,而运行程序时将使用链接和.dll。但是.lib和.dll到底有什么区别?
.lib文件是否不包含来自.dll文件的功能代码?使用两个单独的文件有什么需要?
请说清楚。
在编译和链接期间,.exp的用途是什么?.lib和.dll有什么区别?我知道将使用.lib,而运行程序时将使用链接和.dll。但是.lib和.dll到底有什么区别?
.lib文件是否不包含来自.dll文件的功能代码?使用两个单独的文件有什么需要?
请说清楚。
Answers:
对于DLL的导入库,.lib文件完全不包含任何实际代码。它基本上只包含相关DLL中功能的列表-足以使链接程序将对该DLL的引用嵌入与该库链接的内容中,但没有太多其他功能。
.exp文件是导出文件-基本上与.lib文件相同。有循环依赖关系时(至少主要)使用它。例如,假设您有一个DLL充当可执行文件的插件。该可执行文件提供了一些导出的函数供插件DLL使用,但是还需要能够调用插件中的某些函数(例如,加载和初始化插件)。
直到可执行文件被构建为提供.lib文件后,DLL才会链接-但是,直到将DLL构建为提供.lib文件时,可执行文件才会链接。要打破依赖关系,请对可执行文件运行链接器,该链接器将失败(因为它找不到DLL的.lib文件),但会生成一个.exp文件。然后,您将DLL链接到可执行文件的.exp文件。然后,您可以使用DLL的.lib文件重新运行链接以生成可执行文件。