Avoiding the MSVCR100.dll, MSVCP100D.dll, or MSVCR100D.dll is missing error (Also MSVCR110.dll, MSVCR120.dll, MSVCR140.dll)

Note: This also applies to newer MSVCR110.dll, MSVCR120.dll and MSVCR140.dll.

MSVCR100.dll

This msvcr100.dll is the Microsoft Visual C++ Redistributable dll that is needed for projects built with Visual Studio 2010. The dll letters spell this out.

MS = Microsoft
V = Visual
C = C program language
R = Run-time
100 = Version

If you create a C++ project in Visual Studio 2010, this file is probably needed.

MSVCP100.dll

This msvcp100.dll is the Microsoft Visual C++ Redistributable dll that is needed for projects built with Visual Studio 2010. The dll letters spell this out.

MS = Microsoft
V = Visual
CP = C++
100 = version

If you create a C++ project in Visual Studio 2010, this file is probably needed.

MSVCR100D.dll

The MSVCR100D.dll is almost the exact same file only the D at the end stands for Debug. This file has debugging enabled and is not considered redistributable.

Why the error?

Ok, so recently I switched to Visual Studio 2010.  I had a C++ application that worked perfectly in Visual Studio 2008.  Once I compiled it with Visual Studio 2010 and ran it on a clean 2008 server (fully patched but otherwise clean), it failed to run with the following error.

TestWin32.exe – System Error

The program can’t start because MSVCR100.dll is missing from your computer. Try reinstalling the program to fix this problem.

Here is the screen shot:

msvcr100.dll

The same things happens with the debug version of the file, only it is a the debug version of the same DLL as noted by the fact that the DLL name ends with D.

Autorun – System Error

The program can’t start because MSVCR100.dll is missing from your computer. Try reinstalling the program to fix this problem.

The screen shot is identical except for the D in the dll name.

msvcr100d.dll

I create a new project in Visual Studio 2010 using the project type of C++ Win32 Project and without making a single change to the default project, I built the file and tested it on my clean machine and the same issue occurred.

So obviously that is not acceptable.  It seems like this should just not happen by default, but unfortunately it does.

Solution

It was actually really easy to resolve for my one project.

Here is what I did.

You can solve this any of the following ways:

  1. Statically link to the dll files so they are compiled into my executable instead of referenced as separate dll files.
  2. Included the dll in the same directory as the exe (I actually didn’t try this but I assume it would work).
  3. Forced everyone to install the VC++ Runtime Redistributable before running the app.

The first option seems the most stable and robust and easiest for a single executable. So that is the one I am going to use.

The second option doesn’t really make sense to me and I would probably never do it. Maybe if I had dozens of executable files that all required the same DLL and I didn’t have an installer, and I wanted to conserve size, which probably wouldn’t happen for me since I am pretty good at creating a quick installer. Though you might be in this a situation.

The third option would make sense if I was planning on running my executable after an install. During the install I could include the VC++ Runtime Redistributable and all would be fine.

Statically Linking the DLLs

Make sure you resolve it for both Release and Debug. The steps are slightly different.

Release

  1. In Visual Studio, I went to the project Properties.
  2. I changed my Configuration to Release.
  3. I went under Configuration Properties | C/C++ | Code Generation
  4. Look at the Runtime Library setting.  It is set to this: Multi-threaded DLL (/MD)
    Change it to this: Multi-threaded (/MT)
  5. Rebuild.

Debug

Almost exactly the same as release.

  1. In Visual Studio, I went to the project Properties.
  2. I changed my Configuration to Debug.
  3. I went under Configuration Properties | C/C++ | Code Generation
  4. Look at the Runtime Library setting. It is set to this: Multi-threaded Debug DLL (/MDd)
    Change it to this: Multi-threaded Debug (/MTd)
  5. Rebuild the debug

It might be a good idea for me to figure out how to change the project so when I create a new project of this type, those settings are the default.

Install the VC++ Runtime Redistributable

Release

Download the appropriate version of VC++ Runtime Redistributable:

File VersionVC++ Runtime Version
MSVCR100.dllMicrosoft Visual C++ 2010 Redistributable Package (x86)
MSVCR110.dllMicrosoft Visual C++ 2012 Redistributable Package (x86)
MSVCR120.dllMicrosoft Visual C++ 2013 Redistributable Package (x86)
MSVCR140.dllMicrosoft Visual C++ 2015 Redistributable Package (x86)

Just google these and you will find the download links. Install the correct version and you are good to go.

Debug

If you are missing MSVCR100D.dll, then that is a debug dll and is not part of the free to download Visual C++ Redistributable package. So you pretty much are stuck with copying it from your dev box. Copy it to the C:\Windows\System32 directory. You need admin privileges to do this.

Note: You would never want to redistribute the debug dll anyway.

Leave a Reply

Your email address will not be published. Required fields are marked *


*

  1. Pingback: real follows

  2. Pingback: exact hosting

  3. re: second option doesnโ€™t really make sense to me

    This is called “side-by-side deployment” and is intended for the case where you have need for a specific version of a DLL, but do not want to force the user to install the entire package that contains the one DLL you need.

    Using this side-by-side deployment, different programs you deploy can have different versions of the same DLL without conflict.

    Or, conversely, you can deploy different versions of the same program in different directories, and each version of your program gets the correct version of support DLL.

    -Jesse

  4. You helped me too.

    I new I needed to switch from DLLs to static linking but I believed the option to be found under the Linker node. Only after reading your article I realized the use of a run-tume linked DLL requires additional code such as calls to LoadLibrary(), GetProcAddress(), FreeLibrary().

    Thank you very much.

  5. Pingback: icecreamthebook.com

  6. This is a very lackluster and undeveloped feature of the game, and brings the multiplayer experience down a little.
    Sony will start sending emails out to all customers shortly
    with details on how to sign-up for the program. Nothing has been confirmed, and it appears that
    this service, if it is indeed in development, will not be available until at least 2013.

  7. Hello,

    I’ve to use Common Language Runtime Support ‘/clr’ to compile my dll.
    However, ‘/clr’ and ‘/MT’ options are incompatible so i can’t change to Multi-threaded (/MT).
    Do you have any solutions ?

    Thks,

    • LOL. Looks like you didn’t take time to read the solution. Only the first of the three solutions listed requires you to statically link the DLLs. Look at solution 2 or 3.

  8. Okay so the only other thing I had to do to make my 2005 code compatible with 2010
    was

    comment this out

    /*#if defined(_AFXDLL) && !defined(_DLL)
    #error Please use the /MD switch for _AFXDLL builds
    #endif
    */
    in afx_ver.h

    also I checked with dumpbin after adding the appropriate paths to the dlls and everything
    Microsoft loses 50 points for making this so difficult
    This is the third time I thought I had it working but didn’t

    The last thing I learned was to use dumpbin /dependents instead of dumpbim /depends

    Hope this helps anyone else out there struggling with this odd problem

  9. thanks for the solution.. but i still can’t solve it.
    I use VC++2008 instead of 2010. I tried using the 3rd solution. But, after I install Visual C++ 2008 Redistributable Package (x86), the missing msvcp100.dll still occured. help plz..?

    • If it is saying you are missing msvcp100.dll, then you need the vc++2010. The vc++2008 installs msvcr90.dll which would not be the right one.

  10. Thank you.
    But your suggestion of statical linking does not work.
    In VS 2010, I selected /MT for Code Generation in 64 bit release DLL and rebuilt. Size increased (from 32K to 93K). But Dependency Walker still shows MSVCR100.DLL as used.
    Currently, did not find a way to link without this DLL.

    So, had to search another ways.
    Force Redistributable setup – problems to detect whether already installed, a lot of GUIDs for different versions. And I have also VM which have msvcr100 without Redistributable installed.
    So, my current solution in Setup – try to load msvcr100.dll. If fails, redistribute it in Program Files.

    • Sorry, /MT really does the work.
      There was a problem with Dependency Walker data refresh – it continued erroneously show msvcr100 in dependencies.

  11. Thanks a lot, saved a lot of time.

    Just having to figure out where C/C++ node is in VS2010 was troublesome. I had to add a dummy cpp file (and then I deleted it) to view the node in the configuration properties (whereas my project already include cpp files…).

  12. Thanks for sharing the information. It worked like charm for me.

    When I first met the problem some days ago, I used [dumpbin.exe /depends appname.exe] to get the needed libraries for my application then thought about get msvcr100d.dll from the internet.

    Secondly, I realised that the static linking process described resulted in increase in application size. Mine rose from 90Kb to 453Kb.

    Anyway, thanks a lot.

    • Yes, you either have to increase size by including the vcredist installer, or add the dlls to your own installer, or static link. They all increase size just in different ways. There is no way to avoid increased size in one way or the other.

  13. Just for others who run into the same issue:

    I was able to get past the error using several methods above, static link, moving the .dll in with the package,
    etc. Now I get a “The application was unable to start correctly (0xc000007b)” error.

    Honestly Microsoft, just kill off the .dll nonsense already. Its a nightmare, it causes way more problems than it
    was ever designed to solve, and nobody (but nobody) needs to save memory the way dlls were designed to do.

    Scott

    • So the follow up is that installing visual studio on the target machine fixed the issue. This solution
      really stinks, but it is good enough for right now. Note that both the machine used to generate the
      application and the target (which is one foot away) are both running windows 7 64 bit. None of the
      other solutions worked.

      Scott

      • For those who get the same “unable to start correctly” error, it probably means that you copied the wrong .dll . For 64-bit applications, you have to copy the dll from “C:\Windows\SysWOW64” instead of “C:\Windows\System32”.
        Also, note that sometimes you need more than “msvcr100d.dll”, the next error could be for “msvcp100d.dll”, and that means that you got the first file (“msvcr100d.dll”) right.

        • Had this same issue. Apparently I “did it right”, because then I got the msvcp100d.dll error.
          Installed only Windows 64 Redistributable before, went through and installed the x86 Redistributable, and it all works good now.

          Thanks for the help!

  14. ื”ื•ื“ืขื” ื–ื• ืžื•ืคื™ืขื” ืคืขืžื™ื ืจื‘ื•ืช ื•ื‘ืจืฆื•ื ื™ ืœื‘ื˜ืœื”!!!

  15. I had the same error message and just un-installed Google Chrome, then re-installed it. It is now working just fine.

  16. Great!

    I got stuck with this problem and your post gave me the solution.
    Thankls a lot for sharing your knowledge.

    Regards.

  17. I get this error…. but don’t have Visual Studio…. The only thing I can think of is that a co-worker sent me a presentation video recently and I’ve been receiving this message ever since…. Thoughts on how to fix it?

  18. Pingback: How to compile WinNFSd with Visual Studio? | Rhyous

  19. Oh my gosh, I wish I found you 3 weeks ago…. What a small and stupid setting change that worked! You are the man, thank you so much. Also, I really appreciate the walk through too often people assume that you will know exactly what buttons to click. I wish everyone on the internet could answer questions this easily. As a side note, I will never understand why Microsoft assumes that just because I know how to write a program that I will know every single compiler setting to get the program ready for release.

    Save my ass big time. Thank you from Washington DC.

  20. Little question, I do got the files etc, but I get: Can’t find accespoint off the procedure ??1critcal_section@Concurreny@@QAE@XZ in the DDl-file MSVCR100.dll

  21. Rebuilding with static libraries in some cases causes:

    LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol _main

    Others suggest this is due to functions that rely on CRT initialization (e.g. strcmp), no clear answer found. (Nothing to do with ATL in my case.)

    Any suggestions?

  22. Whoa! This article saved me loads of irritations (and boy, did I already swallow loads of ’em!).
    You saved ny butt! Loads of thanks ‘cos you’re a boy, if you were a girl ….

  23. Hi, I think you forgot about the issue Scharl mentiones. The problem is that if you are using extra static libraries, they have to be compiled with the same ‘Runtime Library setting’ as your program, where you want to use them.
    Otherwise an error like Scharl’s will appear. You should update this information in your post. Well written otherwise, maybe a download link for the right .dll would be helpful for some.
    You can look here: http://stackoverflow.com/questions/3162325/after-building-exe-using-vs-2010-c-missing-msvcp100-dll
    to see how the issue can be solved.

  24. ‘/clr’ and ‘/MTd’ command-line options are incompatible
    i get that error every time i try to debug.

    • I also get this problem, I have been trying to statically link msvcr100d into my program but I get the message “Command line error D8016: ‘/clr’ and ‘/MTd’ command-line options are incompatible” and can’t use No common language runtime support.

  25. Thanks so much. I appreciate not only the steps to fix the problem, but also the explanation of what the file is and other potential solutions! Well written.

  26. Ahm… What`s the effect if my msvcr100.dll is remove from my system32???
    Will my computer be broken or something???
    Will my computer be slow???
    what if I edited it for example I replace my original msvcr100.dll that has a size of 752b to 732b or vice versa…

    ASAP!!!…

  27. Thanks for the tip! Your instructions are extremely well-written.

    It’s a joy to read instructions that actually include all of the steps, unlike most of the Java how-to’s I’ve found.

  28. Well, this would be neat if it worked but I get errors such as:

    1>msvcprt.lib(MSVCP100.dll) : error LNK2005: “void __cdecl std::_Xlength_error(char const *)” (?_Xlength_error@std@@YAXPBD@Z) already defined in libcpmt.lib(xthrow.obj)
    1>msvcprt.lib(MSVCP100.dll) : error LNK2005: “void __cdecl std::_Xout_of_range(char const *)” (?_Xout_of_range@std@@YAXPBD@Z) already defined in libcpmt.lib(xthrow.obj)
    1>msvcprt.lib(MSVCP100.dll) : error LNK2005: “public: virtual __thiscall std::basic_streambuf<char,struct std::char_traits >::~basic_streambuf<char,struct std::char_traits >(void)” (??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAE@XZ) already defined in libcpmt.lib(cout.obj)
    1>msvcprt.lib(MSVCP100.dll) : error LNK2005: “protected: __thiscall std::basic_streambuf<char,struct std::char_traits >::basic_streambuf<char,struct std::char_traits >(void)” (??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@XZ) already defined in libcpmt.lib(cout.obj)
    1>msvcprt.lib(MSVCP100.dll) : error LNK2005: “protected: char * __thiscall std::basic_streambuf<char,struct std::char_traits >::pptr(void)const ” (?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ) already defined in libcpmt.lib(cout.obj)
    1>msvcprt.lib(MSVCP100.dll) : error LNK2005: “protected: char * __thiscall std::basic_streambuf<char,struct std::char_traits >::gptr(void)const ” (?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ) already defined in libcpmt.lib(cout.obj)
    1>msvcprt.lib(MSVCP100.dll) : error LNK2005: “protected: void __thiscall std::basic_streambuf<char,struct std::char_traits >::pbump(int)” (?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z) already defined in libcpmt.lib(cout.obj)
    1>msvcprt.lib(MSVCP100.dll) : error LNK2005: “protected: void __thiscall std::basic_streambuf<char,struct std::char_traits >::gbump(int)” (?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z) already defined in libcpmt.lib(cout.obj)
    1>msvcprt.lib(MSVCP100.dll) : error LNK2005: “protected: char * __thiscall std::basic_streambuf<char,struct std::char_traits >::_Pninc(void)” (?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ) already defined in libcpmt.lib(cout.obj)
    1>msvcprt.lib(MSVCP100.dll) : error LNK2005: “public: void __thiscall std::basic_ios<char,struct std::char_traits >::setstate(int,bool)” (?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z) already defined in libcpmt.lib(cout.obj)
    1>msvcprt.lib(MSVCP100.dll) : error LNK2005: “public: virtual __thiscall std::basic_ostream<char,struct std::char_traits >::~basic_ostream<char,struct std::char_traits >(void)” (??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UAE@XZ) already defined in libcpmt.lib(cout.obj)
    1>msvcprt.lib(MSVCP100.dll) : error LNK2005: “public: virtual __thiscall std::basic_ios<char,struct std::char_traits >::~basic_ios<char,struct std::char_traits >(void)” (??1?$basic_ios@DU?$char_traits@D@std@@@std@@UAE@XZ) already defined in libcpmt.lib(cout.obj)
    1>msvcprt.lib(MSVCP100.dll) : error LNK2005: “public: __thiscall std::basic_ostream<char,struct std::char_traits >::basic_ostream<char,struct std::char_traits >(class std::basic_streambuf<char,struct std::char_traits > *,bool)” (??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z) already defined in libcpmt.lib(cout.obj)
    1>msvcprt.lib(MSVCP100.dll) : error LNK2005: “protected: __thiscall std::basic_ios<char,struct std::char_traits >::basic_ios<char,struct std::char_traits >(void)” (??0?$basic_ios@DU?$char_traits@D@std@@@std@@IAE@XZ) already defined in libcpmt.lib(cout.obj)
    1>msvcprt.lib(MSVCP100.dll) : error LNK2005: “public: void __thiscall std::basic_ios<char,struct std::char_traits >::clear(int,bool)” (?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z) already defined in libcpmt.lib(cout.obj)

    when compiling with /MT.

    Any idea?

  29. thanks for helping me out i really needed this i was looking all over the internet and u are the only one who helped me ๐Ÿ™‚

    Greetings, Darren

    • Yeah…same thing when I was first looking for this. The information was there, but wasn’t clear or well-written. Hopefully my post is both clear and well-written.