在编译和链接时,.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 文件重新运行链接以生成可执行文件。
关于c - .exp有什么用,.lib和.dll有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2727020/