web-dev-qa-db-fra.com

erreur 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 en 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 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
65
TVSuser1654136

Vous essayez de lier des objets compilés par différentes versions du compilateur. Ce n'est pas pris en charge dans les versions modernes de VS, du moins si vous utilisez la bibliothèque standard C++. Les différentes versions de la bibliothèque standard étant incompatibles avec les binaires, toutes les entrées de l'éditeur de liens doivent donc être compilées avec la même version. Assurez-vous de recompiler tous les objets à lier.

L'erreur du compilateur nomme les objets impliqués afin que les informations de la question aient 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 à recompiler Projectname1.lib avec VS2012.

88
David Heffernan

pour chaque projet de votre solution, assurez-vous que

Propriétés> Config. Propriétés> Général> Plate-forme

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

vous pouvez également travailler sur v100 à partir de visual studio 2012

39
Ahmed U3

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

4
Jinxi

J'ai mis à niveau de 2010 à 2013 et après avoir modifié l'ensemble des outils de la plate-forme du projet, je dois cliquer avec le bouton droit de la souris sur la solution et choisir Retarget ... pour la faire fonctionner.

3
Hai Tran