0

I uploaded my (VS2013) project folder and provided it to the other members of my team, but when they tried to build/run it, using Visual Studio 2012 they got this error, it also happened on their version of Visual Studio 2013.

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

They reinstalled VS2010 but no go.

I also tried to statically link my project by using /MT in the Code Generation options but now I get:

Unresolved External Symbol __free_dbg libcmptd.lib cout.obj

....25 more...

How can I get it so my project can be build/ran on my team members pc? How do I resolve the unresolved externals? It seems to happen purely with regular Microsoft files.

Michael IV
  • 11,016
  • 12
  • 92
  • 223
RaenirSalazar
  • 556
  • 1
  • 7
  • 20
  • You need to remove the Visual Studio 2010 dependency. Are all of your dependent libraries/dlls built with visual studio 2013? – drescherjm Apr 15 '14 at 17:46
  • 1
    So you got a debug build made with VS2013, hope it runs with team mates that have VS2012, actually needs VS2010 to be installed. Sounds like quite a zoo, watch out for lions. If you actually intend to support all these versions then *do* let team mates build from source. That's the way everybody works. With the obvious benefit that you don't have to solve every problem yourself. – Hans Passant Apr 15 '14 at 22:26
  • They do have the source, they open it from my sln file, select their version of MVS from the options, click rebuild and then run/f5. It then prompts the above error. – RaenirSalazar Apr 16 '14 at 03:39

3 Answers3

0

This message generally states that the dll is referred to directly or indirectly in your application and is missing.

The 'D' at the end show us this is the Debug version of the file, this is DLL file is provided with the Visual Studio 2010 installation. So the MSVCR100D.dll would be provided with the installation of Visual Studio 2010.

Of course, you could be missing other versions 2008 (MSVCR90D) 2010 (MSVCR100D) 2012 (MSVCR110D) or the 2013 (MSVCR120D), each dll is provided according to the Visual Studio version.

There are a few ways to solve this:

  1. Check to be sure that you're compiling all the components of your project in Release mode. If this does not solve the issue continue to the next steps.
  2. You could solve this locally by installing Visual Studio 2010 on your machine. This is not what I would recommend, but it would surely overcome the issue
  3. You could also download the file from this third party website and copy it to your projects bin: http://www.dll-files.com/dllindex/dll-files.shtml?msvcr100d
    This option is the LEAST recommended option.
  4. Run dependency Walker and see what file depends on the MSVCR100D.dll and the try and fix that file in order to break your dependency. You can download depends here: http://www.dependencywalker.com/

    Check to be sure that you're project is linking the correct version of the CRT and any other libraries you may be using (e.g., MFC, ATL, etc.)

Note: Installing the redistributables alone will NOT solve this problem, since the redistributables only contain the release version of the file MSVCR100.dll (notice no 'D')

Merav Kochavi
  • 4,223
  • 2
  • 32
  • 37
0

You are mixing C++ libraries built with different versions of the compiler (and as we know some of them are linked against debug dynamic version of VC10 runtime library). This is not supported, as different compiler versions have different ABIs.

To fix the mess you need to find libraries built with parameters that match parameters of your project. They should be built:

  • with the same compiler version (ex. VS 2013)
  • with the same configuration (Debug/Release)
  • against the same platform (x86/x64/ARM)
  • against the same runtime library variant (static/dynamic + debug/release)

You could either try to find prebuilt versions on the web or to build libraries yourself from source codes. Often, you will want to have multiple configuration/platforms for your project and, thus, you will need multiple versions of your libraries.

If your search will not succeed (for example if there is no VS2013 build for a closed source library) you could roll back your project to another version of compiler and to start over.

Any attempts to link incompatible libraries even if somehow succeeded will lead to random crashes.

Ivan Aksamentov - Drop
  • 12,860
  • 3
  • 34
  • 61
-2

Would it be possible that in your project you are somehow using some component/library built with Visual Studio 2010, which requires the MSVCR100D DLL?

Mr.C64
  • 41,637
  • 14
  • 86
  • 162
  • To answer both you and dresherjm, I actually don't know, and probably not (as in not everything uses 2013) as I use assimp for model loading, so I suspect its built with either 2010 or whatever linux uses. I use freeglut, glew, glm, and assimp as dependencies. – RaenirSalazar Apr 15 '14 at 17:54
  • 1
    Unless these are static libraries (even then you may have problems) you would need to find Visual Studio 2013 versions of these dependencies if you want to use Visual Studio 2013. For my projects I compile all of my open source dependencies myself for each compiler that I use. – drescherjm Apr 15 '14 at 18:32
  • Yeah I initially tried that meself but only for one of these to blow up in my face for a variety of reasons. I believe Assimp in particular stubbornly refused to compile and the instructions were beyond poor and vague. But that doesn't really explain the whole project not working in a VS2013 environment on another computer, and working on my computer (which it does). – RaenirSalazar Apr 15 '14 at 19:26
  • It can look like it works if someone has the Visual Studio 2010 compiler installed (or the crt dlls for VS2010) however this is not a good solution since it can cause the application to crash because you are using 2 different independent heaps when you do this. You can not allocate memory in 1 heap and free it in a second this will cause heap corruption and random looking crashes. – drescherjm Apr 15 '14 at 20:01
  • Let me rephrase that, it is my project, originally built on my computer, and so it works for me, but it does not work on anyone else's computer. – RaenirSalazar Apr 16 '14 at 00:15
  • 1
    This is not an answer – Ivan Aksamentov - Drop Oct 25 '15 at 13:22