error LNK2038: incompatibilité détectée pour ‘_MSC_VER’: la valeur ‘1600’ ne correspond pas à la valeur ‘1700’ dans CppFile1.obj

Je convertissais mes projets de VS2010 à VS2012.Mais je reçois une erreur de l’éditeur de liens _MSC_VER dans certains projets. Après une longue navigation sur Google, j’ai découvert que le problème était dû à la liaison d’une bibliothèque créée dans VS2010 à VS2012.

Comment puis-je savoir quel projet est à l’origine de l’erreur? Ici je cite l’erreur:

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 *)" (?_Facet_Register@facet@locale@std@@CAXPAV123@@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 

Vous essayez de lier des objects compilés par différentes versions du compilateur. Ce n’est pas pris en charge dans les versions modernes de VS, du moins pas si vous utilisez la bibliothèque standard C ++. Différentes versions de la bibliothèque standard sont incompatibles avec les binarys et vous devez donc comstackr toutes les entrées de l’éditeur de liens avec la même version. Assurez-vous de recomstackr tous les objects à lier.

L’erreur du compilateur nomme les objects impliqués, de sorte que les informations de la question ont déjà la réponse que vous recherchez. Plus précisément, il semble que la bibliothèque statique que vous liez doit être recompilée.

La solution consiste donc à recomstackr Projectname1.lib avec VS2012.

pour chaque projet dans votre solution assurez-vous que

Propriétés> Config. Propriétés> Général> Platform Toolset

est un pour tous, v100 pour visual studio 2010, v110 pour visual studio 2012

vous pouvez également travailler sur v100 de Visual Studio 2012

J’importais aussi des projets de VS2010 à VS 2012. J’avais les mêmes erreurs. Les erreurs ont disparu lorsque j’ai rétabli Propriétés> Config. Propriétés> Général> Platform Toolset to v100 (VS2010). Cela pourrait ne pas être la bonne approche, cependant.

J’ai effectué une mise à niveau de 2010 à 2013 et après avoir modifié tous les outils de plate-forme des projets, je dois cliquer avec le bouton droit sur la solution et choisir Retarget … pour que cela fonctionne.