MSVCP120d.dll缺失

Maz*_*Man 39 c++ visual-studio-2012

每次我想编译我的Visual Studio项目时,我都会收到MSVCP120d.dll缺失的消息.谷歌无法帮助我.我已经安装了一些可再发行组件,但它们没有帮助.我也发现了这个:

Msvcp120d.dll C++运行时的调试版本.不允许再分配.

http://msdn.microsoft.com/en-us/library/windows/hardware/dn448963(v=vs.85).aspx

dre*_*rjm 56

从评论中,问题是由在Visual Studio 2012编译的项目中使用Visual Studio 2013构建的dll引起的.原因是第三方库名为包含dll vc11,vc12的文件夹.必须小心使用任何使用编译器版本(少于4位数)的系统,因为这与Visual Studio的版本不匹配(Visual Studio 2010除外).

  • vc8 = Visual Studio 2005
  • vc9 = Visual Studio 2008
  • vc10 = Visual Studio 2010
  • vc11 = Visual Studio 2012
  • vc12 = Visual Studio 2013
  • vc14 = Visual Studio 2015

Microsoft C++运行时dll还使用基于编译器版本而不是Visual Studio版本的2位或3位数代码.

  • MSVCP80.DLL来自Visual Studio 2005
  • MSVCP90.DLL来自Visual Studio 2008
  • MSVCP100.DLL来自Visual Studio 2010
  • MSVCP110.DLL来自Visual Studio 2012
  • MSVCP120.DLL来自Visual Studio 2013
  • MSVCP140.DLL来自Visual Studio 2015


小智 41

我发现自己浪费时间寻找解决方案,我怀疑将来再做一次.所以这是给自己和其他可能觉得有用的人的说明.

如果缺少MSVCP120.DLL,则表示您尚未安装Visual Studio 2013(x86和x64)的Visual C++ Redistributable Packages.安装,重启,你应该在c:\ Windows\System32中找到这个文件.

现在,如果缺少MSVCP120D.DLL,这意味着您尝试运行的应用程序是在调试模式下构建的.正如OP所提到的,运行时的调试版本是不可分发的.

那么我们该怎么办?

好吧,我知道有一个选项:转到Project的Debug配置> C/C++>代码生成>运行时库,然后选择多线程调试(/ MTd).这将静态链接MSVCP120D.dll到您的可执行文件.

如果您只想快速获取内容,还可以快速修复:从sys32(我的是C:\ Windows\System32)文件夹中复制MSVCP120D.DLL.您可能还需要MSVCR120D.DLL.

快速修复的附录:为了减少猜测,您可以使用依赖性walker.使用依赖性walker打开您的应用程序,您将看到需要哪些DLL文件.

例如,我最近的应用程序是在Visual Studio 2015(Windows 10 64位计算机)中构建的,我将其定位到32位Windows XP计算机.使用依赖性walker,我的应用程序(见截图)需要以下文件:

  • opencv _*.dll < - 我自己的dll文件(也可能有依赖)
  • msvcp140d.dll < - SysWOW64\msvcp140d.dll
  • kernel32.dll < - SysWOW64\kernel32.dll
  • vcruntime140d.dll < - SysWOW64\vcruntime140d.dll
  • ucrtbased.dll < - SysWOW64\ucrtbased.dll

除了我构建的opencv*文件之外,我还需要从C:\ Windows\SysWow64(System32 for 32-bit)复制系统文件.

别客气.:-)

  • IMO这比接受的答案更有帮助. (6认同)
  • 如果你不是**实际上**利用`Debug`库而是只是尝试在默认的VS"Debug"配置中编译,你可以简单地改为"Release"配置. (2认同)