Помощь с ошибкой Linker LNK2038!

Я пытаюсь перенести небольшое приложение из 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

Хуже всего то, что я не знаю, где я должен начать проверять...

Любая помощь будет принята с благодарностью.

Ответ 1

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

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

detect_mismatch pragma в VS 2010 - это причина, по которой эта ошибка испускается.

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

Моя проблема заключалась в том, что в зависимом проекте используется "Использовать многобайтовый набор символов"
в разделе Generl → Character set. в то время как другой проект имел значение "Нет набора"