2015-11-11 66 views
1

enter image description here背景。我在另一台计算机上运行了我的程序的发行版本,并立即收到一条消息,“找不到Your_DLL.dll或它的一个依赖项”。我相信我已经跟踪到这个事实,“Your_DLL.dll”使用MSVCR120D.DLL。我使用Dependency Walker(Depends.exe)进行了检查。在我的原始计算机上,一切都很好,因为我拥有完整的Visual Studio(2013),并且存在MSVCR120D.DLL。但是,它不在另一台机器上,也不应该是MSVCR120.DLL的Debug版本。我拉我的头发试图找出我的项目中的“Your_DLL”我正在使用MSVCR120D.DLL或在发布版本下有任何调试设置。在整个目录中搜索MSVCR120D.DLL什么都没有。当然,也许在发布版本的设置中有某种方式利用调试DLL,然后调用这个调试DLL。有人能给我一个线索在哪里寻找问题?Visual C++/Visual Studio设置。什么叫MSVCR120D.DLL

谢谢,

戴夫

+0

当您将活动构建配置设置为Release时,构建配置管理器会说什么? – cup

+0

杯,感谢您回来如此迅速。我试图展示一张照片来展示它的内容。标题是“配置管理器”。如果Acitve解决方案配置为发行版,则活动解决方案平台为x64,且相关dll显示为配置“发行版”和平台x64 – Dave

+0

您正在运行64位版本还是32位版本?如果存在32位配置,请检查32位配置所说的内容 – cup

回答

0

谢谢你所有的答案。我们发现了这个问题,我必须承认我是造成它的人! “Your_DLL.dll”在Debug和Release中构建得很好。问题是我是如何从另一个DLL使用它的。另一个dll是一个C#项目,在参考文献中,我添加了“Your_DLL.dll”。不幸的是,我把“复制本地”设置为“真”。根据公司政策,我们将所有内容构建到中央位置C:\ bin \ debug或C:\ bin \ release。此外,根据公司政策,当我们添加引用时,我们选择调试版本(您必须选择一个!),但确保将“复制本地”设置为FALSE。因此,当我们的构建脚本构建时,它会正确构建“Your_DLL.dll”,并将发行版放在C:\ bin \ release中。但是,当CSharp.dll随后生成时,它会在C:\ bin \ release中放入一个调试版本的“Your_DLL.dll”。当我们看到Your_DLL.dll的版本在c:\ bin \ debug和c:\ bin \ release中的大小相同时,我们终于注意到了这个问题。

我一直对我们处理参考文献的方式感到沉闷。也许有更好的办法?但这可能是整个其他堆栈溢出问题。

我希望这可以帮助未来的人。 谢谢, Dave

1

一个运行时库的风味在编译器开关/ M指定...

对于动态链接的CRT,它应该是/MD用于发布配置,并且/MDd用于调试。我会检查,首先,通过观察:

项目属性 - >配置属性 - > C/C++ - >代码生成 - >运行时库

[添加] 的depends工具有一个 “简介” 命令(Profile - > Start Profiling),您可以在其中查看动态加载的DLL的运行时信息。希望这会指出你的罪犯。

+0

谢谢。我检查,它确实是/ MD(不是/ MDd)。任何其他地方检查? – Dave

+0

@Dave - 如果你正在拉其他dll - 你必须检查它们。 –

+0

是的,所有其他dll似乎都设置为/ MD。通过运行Matlab编译器创建了一些静态链接的库。有没有办法告诉如果一个.lib是依赖于调试的东西?当我打开一个.lib文件时,Depends.exe似乎发出尖锐的声音。谢谢 – Dave