MSVCP120d.dll missing
I have found myself wasting time searching for a solution on this, and i suspect doing it again in future. So here's a note to myself and others who might find this useful.
If MSVCP120.DLL is missing, that means you have not installed Visual C++ Redistributable Packages for Visual Studio 2013 (x86 and x64). Install that, restart and you should find this file in c:\Windows\System32 .
Now if MSVCP120D.DLL is missing, this means that the application you are trying to run is built in Debug mode. As OP has mentioned, the debug version of the runtime is NOT distributable.
So what do we do?
Well, there is one option that I know of: Go to your Project's Debug configuration > C/C++ > Code Generation > Runtime Library and select Multi-threaded Debug (/MTd). This will statically link MSVCP120D.dll into your executable.
There is also a quick-fix if you just want to get something up quickly: Copy the MSVCP120D.DLL from sys32 (mine is C:\Windows\System32) folder. You may also need MSVCR120D.DLL.
Addendum to the quick fix: To reduce guesswork, you can use dependency walker. Open your application with dependency walker, and you'll see what dll files are needed.
For example, my recent application was built in Visual Studio 2015 (Windows 10 64-bit machine) and I am targeting it to a 32-bit Windows XP machine. Using dependency walker, my application (see screenshot) needs the following files:
- opencv_*.dll <-- my own dll files (might also have dependency)
- msvcp140d.dll <-- SysWOW64\msvcp140d.dll
- kernel32.dll <-- SysWOW64\kernel32.dll
- vcruntime140d.dll <-- SysWOW64\vcruntime140d.dll
- ucrtbased.dll <-- SysWOW64\ucrtbased.dll
Aside from the opencv* files that I have built, I would also need to copy the system files from C:\Windows\SysWow64 (System32 for 32-bit).
You're welcome. :-)
From the comments, the problem was caused by using dlls that were built with Visual Studio 2013 in a project compiled with Visual Studio 2012. The reason for this was a third party library named the folders containing the dlls vc11, vc12. One has to be careful with any system that uses the compiler version (less than 4 digits) since this does not match the version of Visual Studio (except for 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
- vc15 = Visual Studio 2017
- vc16 = Visual Studio 2019
The Microsoft C++ runtime dlls use a 2 or 3 digit code also based on the compiler version not the version of Visual Studio.
- MSVCP80.DLL is from Visual Studio 2005
- MSVCP90.DLL is from Visual Studio 2008
- MSVCP100.DLL is from Visual Studio 2010
- MSVCP110.DLL is from Visual Studio 2012
- MSVCP120.DLL is from Visual Studio 2013
- MSVCP140.DLL is from Visual Studio 2015, 2017 and 2019
There is binary compatibility between Visual Studio 2015, 2017 and 2019.