背景。我在另一台计算机上运行了我的程序的发布版本,并立即收到消息“无法找到Your_DLL.dll或其中一个依赖项”。我相信我已经跟踪了“Your_DLL.dll”使用MSVCR120D.DLL的事实。我使用Dependency Walker(Depends.exe)检查了这个。在我的原始计算机上,一切都很好,因为我有完整的Visual Studio(2013)和MSVCR120D.DLL。但是,它不存在于另一台机器上,也不应该是它的MSVCR120.DLL的调试版本。我正在试着弄清楚我的项目“Your_DLL”我在哪里使用MSVCR120D.DLL或在发布版本下进行任何调试设置。在整个目录中搜索MSVCR120D.DLL没有任何结果。当然,也许在发布版本的设置中的某些东西以某种方式使用调试dll,而后者又调用此调试dll。有人能给我一个线索在哪里寻找问题吗?
谢谢,
戴夫
答案 0 :(得分:1)
运行时库的风格在编译器开关/ M ...
中指定对于动态链接的CRT,发布配置应为 / MD ,调试时应为 / MDd 。我会先查看:
项目属性 - >配置属性 - > C / C ++ - >代码生成 - >运行时库
[加入] Depends工具有一个" Profile"命令(配置文件 - >开始分析),您可以在其中查看动态加载的DLL的运行时信息。希望能指出你的罪犯。
答案 1 :(得分:0)
感谢您的所有答案。我们发现了这个问题,我必须承认我是造成这个问题的人! " Your_DLL.dll"在Debug和Release中构建得很好。问题是我是如何从另一个DLL使用它的。另一个dll是一个C#项目,在引用下,我添加了#34; Your_DLL.dll"。不幸的是,我离开了#34;复制本地"真的。根据公司政策,我们将所有内容构建到中央位置C:\ bin \ debug或C:\ bin \ release。另外,根据公司政策,当我们添加引用时,我们选择调试版本(您必须选择一个!)但请务必选择"复制本地"为假。因此,当构建脚本构建时,它会正确构建" Your_DLL.dll"并将发布版本放在C:\ bin \ release中。但是,当随后构建CSharp.dll时,它正在调试版本的" Your_DLL.dll"在C:\ bin \ release中。当我们在c:\ bin \ debug和c:\ bin \ release中看到Your_DLL.dll的版本大小相同时,我们终于注意到了这个问题。
我对处理参考文献的方式总是有一种沉闷的感觉。也许有更好的方法?但这可能是另一个堆栈溢出问题。
我希望这有助于将来的某些人。 谢谢, 戴夫