c++ - 如何在发布版本中找到导致调试运行时依赖的原因

标签 c++ windows-runtime

我在 VS2015 中构建的 C++ 项目输出一个 DLL 文件。这个项目依赖于变幻莫测的 *.lib 文件。当我使用 dependency walker 检查输出 DLL 时,它显示它依赖于 VCRUNTIME140D.DLL。但我在 Release模式下构建项目。

那么,即使我使用 Release模式构建项目,是否仍然可以找到导致链接调试运行时的原因。

最佳答案

您实际上应该能够通过 Dependency Walker 查看导致依赖性的确切原因。我创建了一个示例解决方案,其中包含两个输出 DLL 的项目。第一个项目链接到第二个项目,第二个项目即使在 Release模式下也使用调试运行时,因此在 Release模式下构建第一个 dll 项目将输出一个同时引用发布和调试运行时的 dll。这是我在使用 Dependency Walker 检查第一个 dll 时得到的结果:

Dependency Walker showing both runtimes

如您所见,通过彻底检查导入的库列表,您应该能够找出哪个导入了运行时的调试版本。

编辑

好的,如果依赖来自 .lib 文件,那么我能想到的最好的办法是:

1) 像这样启用详细的链接器输出:

Enable Verbose linker output

2) 构建并检查输出窗口以查看哪个 .lib 文件触发了不需要的 .dll 的加载,在我的例子中它很好地显示了 MixedModeDll2.lib 触发加载MSVCRTD:

Verbose linking output example

关于c++ - 如何在发布版本中找到导致调试运行时依赖的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29889740/

相关文章:

c++ - 如何定位 WinRT 异步方法调用中出现错误的位置?

windows-runtime - 我应该将 Metro 应用程序的 TemporaryKey.pfx 文件添加到版本控制中吗?

c++ - Bullet Physics 最简单的碰撞示例

c++ - vector 必须与其分配器具有相同的值

c++ - 根据循环内的两个不同条件更新计数器

c++ - 如何理解取消引用指向数组的指针得到指向元素的指针?

c# - 什么与 WinRT (C#) 上的 System.Diagnostic.Process 等效?

c# - 空闲时间后隐藏鼠标光标和 StackPanel Windows 8.1 - 通用应用程序

c++ - 为我的类(class)重载流运算符 << >> 的正确方法是什么?

microsoft-metro - 更改 WinRT 应用程序的应用程序 list 会破坏应用程序数据