2013-10-24 8 views
55

Stavo convertendo i miei progetti da VS2010 a VS2012.Ma sto riscontrando un errore _MSC_VER linker in alcuni progetti . Dopo una lunga navigazione su google ho scoperto che il problema è dovuto al collegamento di una libreria creata in VS2010 a VS2012.errore LNK2038: mancata corrispondenza errata per "_MSC_VER": il valore "1600" non corrisponde al valore "1700" in CppFile1.obj

In che modo è possibile individuare il progetto che ha causato l'errore? Qui sto citando l'errore:

Error 6 error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj  D:\ProjectLocation\Projectname1.lib(CppFile2.obj) Projectname2 
Error 15 error LNK2001: unresolved external symbol "private: static void __cdecl std::locale::facet::_Facet_Register(class std::locale::facet *)" ([email protected]@[email protected]@@[email protected]@Z) D:\ProjectLocation\Projectname1.lib(CppFile3.obj) Projectname2 
Error 13 error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj D:\ProjectLocation\Projectname1.lib(CppFile4.obj) Projectname2 
Error 12 error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj D:\ProjectLocation\Projectname1.lib(CppFile5.obj) Projectname2 
Error 10 error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj D:\ProjectLocation\Projectname1.lib(CppFile6.obj) Projectname2 
Error 11 error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj D:\ProjectLocation\Projectname1.lib(CppFile7.obj) Projectname2 
Error 9 error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj D:\ProjectLocation\Projectname1.lib(CppFile8.obj) Projectname2 
Error 4 error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj  D:\ProjectLocation\Projectname1.lib(CppFile9.obj) Projectname2 
Error 14 error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj D:\ProjectLocation\Projectname1.lib(CppFile10.obj) Projectname2 
Error 7 error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj D:\ProjectLocation\Projectname1.lib(CppFile11.obj) Projectname2 
Error 8 error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj D:\ProjectLocation\Projectname1.lib(CppFile12.obj) Projectname2 
Error 5 error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj D:\ProjectLocation\Projectname1.lib(CppFile13.obj) Projectname2 

risposta

75

Si sta tentando di collegare gli oggetti compilati da diverse versioni del compilatore. Questo non è supportato nelle versioni moderne di VS, almeno non se si utilizza la libreria standard C++. Diverse versioni della libreria standard sono binari incompatibili e quindi è necessario compilare tutti gli input del linker con la stessa versione. Assicurati di ricompilare tutti gli oggetti che devono essere collegati.

L'errore del compilatore indica gli oggetti coinvolti in modo che l'informazione la domanda abbia già la risposta che si sta cercando. In particolare, sembra che la libreria statica che si sta collegando debba essere ricompilata.

+0

Grazie David, Quello che stai dicendo è che il problema riguarda i file cpp? Ho fatto tutte le modifiche con i file di progetto aggiungendo il v110 .SO penso che il problema potrebbe non essere con il file di progetto, non è vero? – TVSuser1654136

+2

No, sono i file oggetto. Cosa emette il compilatore. Sembrano essere nel file .lib. Dovrai ricompilarlo. –

+0

Ciao David, iam nuovo in C++ .Iam fondamentalmente un programmatore C#. Potete per favore elaborare i commenti – TVSuser1654136

37

per ogni progetto nella soluzione assicurarsi che

Proprietà> Config. Proprietà> Generale> Piattaforma Toolset

è uno per tutti loro, v100 per Visual Studio 2010, v110 per Visual Studio 2012

si può anche lavorare su v100 da Visual Studio 2012

+0

Dove si trova questa impostazione per i progetti C#? – sergiol

+0

Qual è il tuo errore C# esattamente? –

+0

@sergiol, l'attributo PlatformToolset è un attributo MSBuild che viene utilizzato per specificare la versione del toolset C++. Quindi questo attributo non ha nulla a che fare con C#. – Cary

4

I Stavo importando anche alcuni progetti da VS2010 a VS 2012. Ho avuto gli stessi errori. Gli errori sono scomparsi quando ho impostato Proprietà> Config. Proprietà> Generale> Platform Toolset to v100 (VS2010). Questo potrebbe non essere l'approccio corretto, comunque.

+0

Questa non dovrebbe essere una risposta, ma una nuova domanda. – drescherjm

3

Ho eseguito l'aggiornamento dal 2010 al 2013 e dopo aver modificato il set di strumenti della piattaforma di tutti i progetti, devo fare clic con il pulsante destro del mouse sulla soluzione e selezionare Retarget ... per farlo funzionare.

Problemi correlati