Что означает _ITERATOR_DEBUG_LEVEL = 1? - PullRequest
22 голосов
/ 09 ноября 2010

В VS2010, проекте C ++ я получаю эту ошибку при связывании в x64 / Выпуск:

ошибка LNK2038: обнаружено несоответствие для _ITERATOR_DEBUG_LEVEL: значение '0' не соответствует значению '1'

Все остальные комбинации конфигурации / платформы просто отлично.Таким образом, статическая библиотека создается с _ITERATOR_DEBUG_LEVEL, установленным в 0, и .dll, которая зависит от этого, каким-то образом имеет _ITERATOR_DEBUG_LEVEL, установленный в 1. Я пытаюсь выяснить, что это значит, чтобы я мог выяснить, как это отключить!

Единственные ссылки на эту ошибку, которые я обнаружил при поиске в Google, - это когда _ITERATOR_DEBUG_LEVEL конфликтует со значениями 0 и 2. Это указывает на попытку связать выпуск с отладкой.Но я уверен, что это не тот случай.

Ответы [ 3 ]

37 голосов
/ 09 ноября 2010

Ну, после часа борьбы с этим я понял это сразу после того, как задал вопрос ... для потомков:

_ITERATOR_DEBUG_LEVEL = 0 (in release mode)
_ITERATOR_DEBUG_LEVEL = 1 (in release mode if _SECURE_SCL is defined)
_ITERATOR_DEBUG_LEVEL = 2 (in debug mode)

Каким-то образом _SECURE_SCL был определен как определение препроцессора только в конфигурации Release / x64 моей DLL, и мне пришлось очень трудно прищуриться, чтобы заметить это. Как только я удалил это определение, ошибка исчезла.

Редактировать: Я нашел эту хорошую лекцию / учебник по MSDN, который (помимо прочего) объясняет _ITERATOR_DEBUG_LEVEL . К сожалению, для просмотра требуется последняя версия Microsoft Silverlight.

3 голосов
/ 02 ноября 2012

Для тех, кто имеет безупречные определения препроцессора, но все еще страдает от этой ошибки, проверьте настройки библиотеки времени выполнения проекта.

Если задана одна из версий отладки, _ITERATOR_DEBUG_LEVEL будет установлено в 2.

2 голосов
/ 15 сентября 2011

Я столкнулся с этой проблемой при сборке релиза, но обнаружил, что мой препроцессор определял _DEBUG, когда это должен был быть NDEBUG.Переход на NDEBUG устранил проблему.

...