Помощь с ошибкой 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. в то время как другой проект имел значение "Нет набора"