我与this question有类似的问题。我正在构建一个依赖于其他几个DLL的DLL。当然,在安装VS2012的机器上以调试模式编译时,一切都可以正常工作。然后我开始在发布模式下编译所有依赖项,创建发布DLL。
当我在安装了Visual C ++ Runtime的全新Windows 7计算机上部署它们时,主DLL无法加载,因为它仍然要求MSVCR110D.dll
。
DependencyWalker向我展示了这一点(对于审查很抱歉,我无法显示名称,但我为发布模式构建留下了r
后缀):
如您所见,它引用了Visual C ++运行时的发行版。即使是依赖于DLL的整个树,也只有对发布运行时DLL的引用:
有一个延迟加载的DLL引用MSVCR80.dll
,但它实际上从未实际加载过,而且这也不是我得到的错误。
问题是:如何找出为什么它仍然取决于调试运行时?哪个函数调用负责哪个DLL?如果不是通过DependencyWalker,我可以使用哪些工具和步骤来跟踪它?
答案 0 :(得分:3)
我发现DependencyWalker没有显示正确的家属。有用的是使用Visual Studio命令提示符和dumpbin
程序:
dumpbin /dependents YourDLL.dll
这将列出所有家属,从那里你可以走到树下。我最终找到了罪魁祸首 - 一个引用MSVCRd.dll
的依赖DLL,它在DependencyWalker中显示 not 。
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
。