Background: I’m building a plugin for a large simulation framework. I’m compiling a DLL using Visual Studio C++ 2010.
After much bughunting and googling I believe I have a problem which stems from having multiple versions of CRT linked to my DLL. I’m getting a segfault in tidtable.c (from msvcr100.dll), in the function _CRTIMP PFLS_GETVALUE_FUNCTION __cdecl __set_flsgetvalue(). Reading this thread (there are multiple problems discussed, but towards the end this function is mentioned) is where I got the idea, and if I check the linking part of my project I see msvcr90.dll, ´msvcp100d.dllandmsvcr100d.dll`.
I’m using several external libraries, and I’ve been able to recompile all but one of them using VS2010. The last one is not open source however (it’s a library belonging to the framework), and I guess that is where the dependency would come from. I’m not certain however, how could I check this?
Given that I’m right about where the dependency is coming from, what can I do?
You are linking to the release runtime from Visual Studio 2008 and debug runtime of Visual Studio 2010 … you shouldn’t mix and match release and debug in general. If you need the debug VC9 you’ll need to install Visual Studio 2008 (install before 2010 to be safe)
However I’d probably just rebuild all projects and dependencies against VC10. You may be able to get away with installing the redist for VC9 if it’s missing from your system for release only.
Edit: Link to Dependency Walker which is invaluable for determining missing or conflicting dependencies.