_ITERATOR_DEBUG_LEVEL ошибка в визуальной студии - PullRequest
21 голосов
/ 19 января 2011

Я пытаюсь скомпилировать JRTPLIB в Visual Studio 2010 для Windows 7. Это был настоящий кошмар ... но я по крайней мере сужаю проблемы.

Это осталось.

Error   3   error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in client.obj   C:\Users\Johan-bar\Documents\Visual Studio 2010\Projects\client\client\jrtplib.lib(rtpsession.obj)  client

Я погуглил тонну, и причина, по-видимому, в том, что одна компилируется в режиме отладки, а другая компилируется в режиме выпуска.

Я собираюсь скомпилировать исполняемый файл Release, потому что хочу тестировать на разных компьютерах.

1) Какой из них не находится в режиме Release, JRTPLIB или клиент (мой, тот, который пытается скомпилировать)?

2) Как изменить ITERATOR_DEBUG_LEVEL? Оба используют Runtime Library / MT и определения препроцессора WIN32, _MT, а также значения по умолчанию.

Приветствия

Ответы [ 3 ]

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

Скомпилируйте все, что вы используете, с опцией -D_ITERATOR_DEBUG_LEVEL = 0.Это так по умолчанию в режиме VS 2010 Release, но некоторые вещи все еще построены с другими опциями и поэтому не совместимы с двоичными файлами.

В более старых визуальных студиях был _SECURE_SCL, и я не уверен, что часть кода можетвсе еще используй это.Положите куда-нибудь (скажем, в stdafx.h) статическую проверку, чтобы они совпадали.

#if _ITERATOR_DEBUG_LEVEL == 0 && _SECURE_SCL != 0 
#error _SECURE_SCL != 0 when _ITERATOR_DEBUG_LEVEL == 0 
#endif 

Если вы хотите увидеть, какое значение имеет _ITERATOR_DEBUG_LEVEL, вы можете использовать некоторое сообщение #pragma в коде, чтобы сообщить вам.

8 голосов
/ 11 июля 2012

Решение:

Project Pages >> Configuration Properties >> C,C++ >> Preprocessor >> Preprocessor Definitions

Добавить _ITERATOR_DEBUG_LEVEL=0 в там работал.Смотрите также: Как установить _ITERATOR_DEBUG_LEVEL в VS2010?

0 голосов
/ 26 июня 2014

Я нашел другой способ генерировать эти ошибки.

Я использовал пакетную сборку Visual Studio 2010 для создания всех возможных комбинаций платформы и конфигурации, и я получал эти ошибки.Просмотр результатов показал, что пакетная сборка не учитывает зависимости проекта - следовательно, связывает устаревшую библиотеку из сборки Release со свежекомпилированным файлом Debug obj.

Несколькими строками позже в выводе сборки была построена отладочная версия библиотеки.

Выполнение «пакетной сборки» вручную (т.е. выбор различных комбинаций платформы и конфигурации вручную) позволилочистая сборка.

Мораль: не используйте пакетную сборку Visual Studio 2010.Я не знаю, исправили ли они это в более поздних версиях VS.

...