Ошибка компоновщика LNK2038: в режиме выпуска обнаружено несоответствие - PullRequest
37 голосов
/ 31 октября 2010

Я пытаюсь перенести мое небольшое приложение с Win XP и VS 2005 на Win 7 и VS 2010.

Приложение компилируется и работает гладко в режиме отладки, однако в режиме выпуска я получаю следующую ошибку:

pcrecpp.lib(pcrecpp.obj) : error LNK2038: mismatch detected for 
'_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in LoginDlg.obj

С чего мне начать проверку?

Ответы [ 4 ]

36 голосов
/ 31 октября 2010

Ваше приложение компилируется в режиме выпуска, но вы связываетесь с отладочной версией PCRE, для которой был установлен / MTd (или аналогичный), что вызывает несоответствие уровня отладки итератора в CRT.

Перекомпилируйте PCRE в режиме выпуска в соответствии с вашим собственным приложением.

Прагма detect_mismatch 1007 * в VS 2010 является причиной возникновения этой ошибки.

См. http://blogs.msdn.com/b/vcblog/archive/2009/06/23/stl-performance.aspx (поиск _ITERATOR_DEBUG_LEVEL)

19 голосов
/ 21 января 2011

У меня была такая же ошибка.В моем случае решение простое: у меня был один проект A в зависимости от другого проекта B. B имел определение препроцессора _DEBUG в режиме отладки, а A - нет.

Просто добавьте _DEBUG в проект A (project->свойства-> c ++ -> препроцессор-> определения препроцессора) и все готово.

3 голосов
/ 10 ноября 2011

Это также может быть вызвано установкой определения препроцессора _HAS_ITERATOR_DEBUGGING=0 в проекте B, а не в A, где A создает библиотеку, используемую B.

3 голосов
/ 28 июня 2011

Моя проблема заключалась в том, что зависимый проект использовал "Использовать многобайтовый набор символов"
в Generl -> Набор символовв то время как другой проект имел значение «Нет набора»

...