.exp有什么用?和.lib和.dll有什么区别?

Vin*_*ddy 67 c dll linker static-libraries

在编译和链接期间,.exp的用途是什么?.lib和.dll有什么区别?我知道将使用.lib,而在运行程序时将使用链接和.dll.但是.lib和.dll之间究竟有什么区别?

.lib文件不包含来自.dll文件的函数的代码吗?使用两个单独的文件需要什么?

请澄清.

Jer*_*fin 92

对于DLL的导入库,.lib文件根本包含任何实际代码.它基本上只包含相关DLL中的函数列表 - 足以让链接器将对该DLL的引用嵌入到与库链接的内容中,但不是很多.

.exp文件是一个导出文件 - 基本上与.lib文件大致相同.当你有一个循环依赖时,它被使用(至少主要是).例如,假设您有一个DLL作为可执行文件的插件.可执行文件提供了一些导出的函数供插件DLL使用,但也需要能够调用插件中的某些函数(例如,加载和初始化插件).

在构建可执行文件以提供.lib文件之前,DLL不会链接 - 但在构建DLL以提供.lib文件之前,可执行文件不会链接.要打破依赖关系,可以针对可执行文件运行链接器,这会失败(因为它无法找到DLL的.lib文件),但生成.exp文件.然后,将DLL链接到可执行文件的.exp文件.然后,您可以使用DLL的.lib文件重新运行链接以生成可执行文件.

  • @David:.exp 文件专门与动态链接结合使用。因此,通过询问它们,OP 肯定对动态链接的讨论做出了限制。我特别说过:“**在 DLL 的导入库的情况下** [...]”你怎么认为“甚至没有提到静态与动态库链接”?您确实意识到“DLL”代表“动态链接库”,对吗?这回答了他所问的问题,并且此后主题没有发生任何重大变化。 (2认同)