在编译和链接过程中,.exp 有什么用?.lib 和 .dll 有什么区别?我知道将使用.lib,而在运行程序时将使用链接和.dll。但是.lib 和.dll 之间到底有什么区别呢?
.lib 文件是否不包含来自 .dll 文件的函数的代码?使用两个单独的文件有什么需要?
请澄清。
在编译和链接过程中,.exp 有什么用?.lib 和 .dll 有什么区别?我知道将使用.lib,而在运行程序时将使用链接和.dll。但是.lib 和.dll 之间到底有什么区别呢?
.lib 文件是否不包含来自 .dll 文件的函数的代码?使用两个单独的文件有什么需要?
请澄清。
对于 DLL 的导入库,.lib 文件根本不包含任何实际代码。它基本上只包含相关 DLL 中的函数列表——足以让链接器将对该 DLL 的引用嵌入到与库链接的东西中,但仅此而已。
.exp 文件是一个导出文件——基本上与 .lib 文件几乎相同。当你有一个循环依赖时,它被使用(至少主要是)。例如,假设您有一个充当可执行文件插件的 DLL。可执行文件提供一些导出函数供插件 DLL 使用,但还需要能够调用插件中的一些函数(例如,加载和初始化插件)。
在构建可执行文件以提供 .lib 文件之前,DLL 不会链接——但在构建 DLL 以提供 .lib 文件之前,可执行文件不会链接。要打破依赖关系,您可以针对可执行文件运行链接器,这会失败(因为它找不到 DLL 的 .lib 文件),但会生成一个 .exp 文件。然后将 DLL 链接到可执行文件的 .exp 文件。然后,您可以使用 DLL 的 .lib 文件重新运行链接以生成可执行文件。