5

My project is compiling and running OK in debug and release modes in VS 2010. Today I tried to compile it with VS 2012 and I got this error :

1>  Generating Code...
1>pcrecppd.lib(pcrecpp.obj) : error LNK2038: mismatch detected for '_MSC_VER': 
value '1600' doesn't match value '1700' in NamesEditorDlg.obj

I searched for "_MSC_VER" in the code but I could not find any match. Neither could I find "1600" or "1700".

So I am wondering how I can solve this problem.

In silico
  • 51,091
  • 10
  • 150
  • 143
Wartin
  • 1,965
  • 5
  • 25
  • 40
  • Did you just copied files to 2012 folders or created a fresh project and imported? – huseyin tugrul buyukisik Aug 04 '12 at 11:27
  • _MSC_VER is a predefined macro, so it's built in and you won't find it in the sources. (Apparently its value is 1600 in VS2010 and 1700 in VS2012.) Did you copy any binary files over, anything intrinsic to VS2010, compiled object files? Are you sure the newer compiler isn't trying to access older libraries? Do new projects you create with VS2012 compile? – Mr Lister Aug 04 '12 at 13:42
  • Hey, look what I found: [Help with Linker error LNK2038 !](http://stackoverflow.com/q/4061929/1016716) – Mr Lister Aug 04 '12 at 13:44
  • 1
    Don't mix .lib files that you compiled with VS2010 with .obj files that you compiled with VS2012. The compiler doesn't guarantee that object layouts are compatible between different versions of the compiler, particularly those from the standard C++ library. Rebuild everything. – Hans Passant Aug 04 '12 at 17:26

4 Answers4

5

Looks like you're using a .lib from vc2010 in vc2012 (at a guess it looks like a PCRE library). You'll need to recompile all your .libs or run-time link with the DLLs (ie LoadLibrary, GetProcAddress etc.).

snowdude
  • 3,854
  • 1
  • 18
  • 27
3

In Project Properties, select General and then change the "Platform Toolset" setting to "Visual Studio 2010 (v100)." After I did that, my code compiled fine with the original libraries.

Memitim
  • 131
  • 2
  • and conversely, if your problem is 1700 to 1600 (rather than 1600 to 1700 as in the question), you can do the opposite. Per http://stackoverflow.com/questions/19575747/error-lnk2038-mismatch-detected-for-msc-ver-value-1600-doesnt-match-valu – metao Nov 15 '13 at 03:52
1

Looking it up at http://msdn.microsoft.com/en-us/library/b0084kay.aspx It seems that variable holds the compiler's version number. I would think the best way to fix it would be to create a new project in 2012 and add the source files to the new project.

Keitau
  • 11
  • 1
0

NO, all that you need is is check properties of the project. There exist link to old project files. Need open project properties on page ".NET Framework and links" there del all links end add new for new 2012 project files.

Orion
  • 1