【问题标题】:Why is my release build still looking for a debug DLL (MSVCR110D.dll)?为什么我的发布版本仍在寻找调试 DLL (MSVCR110D.dll)?
【发布时间】:2015-08-04 07:53:45
【问题描述】:

我有与this question 类似的问题。我正在构建一个依赖于其他几个 DLL 的 DLL。自然,在安装 VS2012 的机器上以调试模式编译时,一切正常。然后我开始在发布模式下编译所有依赖项,创建发布 DLL。

当我在安装了 Visual C++ 运行时的全新 Windows 7 机器上部署它们时,主 DLL 不会加载,因为它仍然要求 MSVCR110D.dll。

DependencyWalker 向我展示了这个(抱歉审查,我无法显示名称,但我为发布模式构建留下了 r 后缀):

如您所见,它引用了 Visual C++ 运行时的发行版。即使在整个依赖 DLL 树下,也只有对发布运行时 DLL 的引用:

有一个引用 MSVCR80.dll 的延迟加载 DLL,但实际上从未真正加载过,这也不是我遇到的错误。

问题是:我如何找出为什么它仍然依赖于调试运行时?哪个DLL,哪个函数调用负责?如果不通过 DependencyWalker,我可以使用哪些工具和哪些步骤来追踪它?

【问题讨论】:

    标签: c++ visual-studio-2012 dll


    【解决方案1】:

    我发现 DependencyWalker 没有显示正确的依赖项。有效的是使用 Visual Studio 命令提示符和 dumpbin 程序:

    dumpbin /dependents YourDLL.dll
    

    这将列出所有依赖项,然后您可以从那里向下走。我最终找到了罪魁祸首——一个引用了 MSVCRd.dll 的依赖 DLL,而在 DependencyWalker 中没有显示。

    Dump of file XXXXXXXr.dll
    
    File Type: DLL
    
      Image has the following dependencies:
    
        AVIFIL32.dll
        MSVCR110D.dll   <------------------------ HERE
        WMVCore.DLL
        WINMM.dll
        KERNEL32.dll
        USER32.dll
        ole32.dll
        OLEAUT32.dll
        MSVCP110.dll
    
      Summary
    
            9000 .data
           12000 .rdata
            5000 .reloc
            1000 .rsrc
           48000 .text
    

    然后我必须转到此 DLL 的构建配置,并在链接器选项中将 msvcrd.lib 的依赖关系更改为 msvcr.lib。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多