J'essaie de porter une petite application à moi de Win XP et VS 2005 vers Win 7 et VS 2010.
L'application se compile et s'exécute sans problème en mode débogage, mais en mode Release, j'obtiens l'erreur suivante:
pcrecpp.lib(pcrecpp.obj) : error LNK2038: mismatch detected for
'_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in LoginDlg.obj
Où dois-je commencer à vérifier?
Votre application est en cours de compilation en mode de publication, mais vous établissez une liaison avec la version de débogage de PCRE, qui avait/MTd (ou similaire) défini, provoquant ainsi le décalage dans le niveau de débogage de l'itérateur dans le CRT.
Recompilez PCRE en mode de libération pour correspondre à votre propre application.
Le detect_mismatch
pragma dans VS 2010 est ce qui provoque l'émission de cette erreur.
Voir http://blogs.msdn.com/b/vcblog/archive/2009/06/23/stl-performance.aspx (rechercher _ITERATOR_DEBUG_LEVEL)
J'ai eu la même erreur. Dans mon cas, la solution est simple: j'avais un projet A en fonction d'un autre projet B. B avait une définition de préprocesseur _DEBUG en mode débogage et A n'en avait pas.
Ajoutez simplement _DEBUG au projet A (projet-> propriétés-> c ++ -> préprocesseur-> définitions de préprocesseur) et vous avez terminé.
Cela peut également être dû à la définition de la définition du préprocesseur _HAS_ITERATOR_DEBUGGING=0
dans le projet B et non dans A où A produit une bibliothèque utilisée par B.
Mon problème était que le projet dépendant utilisait "Utiliser un jeu de caractères multi-octets"
sous Generl -> Jeu de caractères. tandis qu'un autre projet avait une valeur "No Set"