我在 VS2015 中构建的 C++ 项目输出一个 DLL 文件。这个项目依赖于变幻莫测的 *.lib 文件。当我使用 dependency walker 检查输出 DLL 时,它显示它依赖于 VCRUNTIME140D.DLL。但我在 Release模式下构建项目。
那么,即使我使用 Release模式构建项目,是否仍然可以找到导致链接调试运行时的原因。
最佳答案
您实际上应该能够通过 Dependency Walker 查看导致依赖性的确切原因。我创建了一个示例解决方案,其中包含两个输出 DLL 的项目。第一个项目链接到第二个项目,第二个项目即使在 Release模式下也使用调试运行时,因此在 Release模式下构建第一个 dll 项目将输出一个同时引用发布和调试运行时的 dll。这是我在使用 Dependency Walker 检查第一个 dll 时得到的结果:
如您所见,通过彻底检查导入的库列表,您应该能够找出哪个导入了运行时的调试版本。
编辑
好的,如果依赖来自 .lib
文件,那么我能想到的最好的办法是:
1) 像这样启用详细的链接器输出:
2) 构建并检查输出窗口以查看哪个 .lib
文件触发了不需要的 .dll
的加载,在我的例子中它很好地显示了 MixedModeDll2.lib
触发加载MSVCRTD
:
关于c++ - 如何在发布版本中找到导致调试运行时依赖的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29889740/