slh*_*hck 2 c++ dll visual-studio-2012
我对这个问题有类似的问题。我正在构建一个依赖于其他几个 DLL 的 DLL。当然,在安装了 VS2012 的机器上以调试模式编译时一切正常。然后我开始在发布模式下编译所有依赖项,创建发布 DLL。
当我将它们部署在安装了 Visual C++ 运行时的全新 Windows 7 计算机上时,主 DLL 不会加载,因为它仍然要求MSVCR110D.dll.
DependencyWalker 向我展示了这个(抱歉,我无法显示名称,但我留下了r发布模式构建的后缀):
如您所见,它引用了 Visual C++ 运行时的发行版本。即使查看整个依赖 DLL 树,也只有对发布运行时 DLL 的引用:
有一个延迟加载的 DLL 引用了MSVCR80.dll,但实际上它从未实际加载,这也不是我收到的错误。
问题是:我如何找出为什么它仍然依赖于调试运行时?哪个 DLL、哪个函数调用负责?如果不通过 DependencyWalker,我可以使用哪些工具和哪些步骤来追踪它?
我发现 DependencyWalker 没有显示正确的依赖项。有效的是使用 Visual Studio 命令提示符和dumpbin程序:
dumpbin /dependents YourDLL.dll\nRun Code Online (Sandbox Code Playgroud)\n\n这将列出所有家属,从那里您可以沿着树向下走。我最终找到了引用的罪魁祸首\xe2\x80\x94a依赖DLL MSVCRd.dll,它不是显示。
Dump of file XXXXXXXr.dll\n\nFile Type: DLL\n\n Image has the following dependencies:\n\n AVIFIL32.dll\n MSVCR110D.dll <------------------------ HERE\n WMVCore.DLL\n WINMM.dll\n KERNEL32.dll\n USER32.dll\n ole32.dll\n OLEAUT32.dll\n MSVCP110.dll\n\n Summary\n\n 9000 .data\n 12000 .rdata\n 5000 .reloc\n 1000 .rsrc\n 48000 .text\nRun Code Online (Sandbox Code Playgroud)\n\n然后我必须转到该 DLL 的构建配置并将依赖项更改msvcrd.lib为msvcr.lib在链接器选项中
| 归档时间: |
|
| 查看次数: |
3204 次 |
| 最近记录: |