web-dev-qa-db-fra.com

Erreur de l'éditeur de liens LNK2038: discordance détectée en mode Release

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?

37
Wartin

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)

36
Alex Budovski

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é.

19
Thomas

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.

3
Art

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"

3
Roman Bober