为啥需要 ILK、PDB 和 EXP 文件?

Posted

技术标签:

【中文标题】为啥需要 ILK、PDB 和 EXP 文件?【英文标题】:Why do I need ILK, PDB and EXP files?为什么需要 ILK、PDB 和 EXP 文件? 【发布时间】:2012-06-07 16:37:36 【问题描述】:

我已经下载了一些 dll 文件,还附带了 pdb、exp 和 ilk 文件。现在我需要知道是否需要将它们放入我的系统文件中,一般来说它们每个的目的是什么?

【问题讨论】:

【参考方案1】:

PDB 文件包含调试信息,如果您需要在任何时候单步执行 DLL 的代码,这将非常有用。

ILK files 被链接器使用。除非要重新编译 DLL,否则不需要它们。

EXP 文件包含有关从 DLL 导出的内容的信息

【讨论】:

解释得很好,所以建议将 PDB 和 EXP 文件包含到我的 sys 目录中? 那么EXP文件的用途是什么?我们什么时候需要 EXP 文件?接受的答案实际上并未提供答案。【参考方案2】:

.ilk 文件是链接器在开发周期中创建的中间文件。 .ilk 文件用于增量链接。如果链接器在尝试进行增量链接时没有找到 .ilk 文件,那么它将执行完整链接并重新生成 .ilk 文件。增量链接旨在加快链接过程。您可以安全地删除 .ilk 文件。

.exp 文件也适用于开发人员。 .exp 文件是为导出一些符号的 .exe 和 .dll 文件创建的。它们的用途类似于 .lib 导入库,但有细微差别。即使相应的 .exe 或 .dll 在链接时创建失败,也会始终创建 .exp 文件。相比之下,.lib 导入库仅在相应的 .exe 或 .dll 链接成功时创建。 .exp 文件有助于链接相互依赖的组件。例如,.exe 可以通过导出一些函数来为其插件提供对其公共资源的访问。插件还提供导出供 .exe 调用。像这样的相互依赖无法成功链接。 .exe 链接将失败,因为 .dll 的导入 .lib 丢失。因此,不会为 .exe 创建 .lib。 .dll 的链接将失败,因为 .exe 的导入库丢失。但是,即使链接失败,也会创建导出文件,因此 .dll 可以链接到 .exp 文件而不是 .lib 文件以成功链接。

【讨论】:

.exp 文件也可以安全删除吗? 看来.ilk和.exp文件是可以删除的,只要你使用.lib和.dll就可以了。每次在 Visual Studio(在调试模式下)编译项目时都会生成它们。如果您使用读取为:start /d .. MyProjectName_Debug.exe(在那里设置“工作目录”)的批处理文件启动应用程序,则不需要它们。使用 Visual Studio 的“编辑并继续”功能时,这些文件用于增量链接。

以上是关于为啥需要 ILK、PDB 和 EXP 文件?的主要内容,如果未能解决你的问题,请参考以下文章

c语言中各种文件,如ILK,PCH,PDB等分别指啥文件?有啥用?

发布生成 .pdb 文件,为啥?

为啥我用VC6编译动态链接库不生成lib和exp文件

为啥生成 pdb 文件会导致静态链接库的大小大幅增加?

VS删除临时文件

为啥我的 Visual Studio 开始以这种方式运行? iisexpress 找不到或打开 PDB 文件