Ошибка _ITERATOR_DEBUG_LEVEL в визуальной студии
Я пытаюсь скомпилировать 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
Я googled тонна, и причина, кажется, одна из них скомпилирована в режиме отладки, а другая скомпилирована в режиме выпуска.
Я собираюсь скомпилировать исполняемый файл Release, потому что хочу протестировать на разных компьютерах.
1) Какой из них не находится в режиме Release, JRTPLIB или клиент (мой, который пытается скомпилировать)?
2) Как изменить ITERATOR_DEBUG_LEVEL? Оба используют Runtime Library/MT и определения препроцессора WIN32, _MT, а также значения по умолчанию, которые я предполагаю.
Приветствия
Ответы
Ответ 1
Скомпилируйте все, что вы используете, с опцией -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 в коде, чтобы сообщить вам.
Ответ 2
Решение:
Project Pages >> Configuration Properties >> C,C++ >> Preprocessor >> Preprocessor Definitions
Добавьте _ITERATOR_DEBUG_LEVEL=0
в работу.
См. Также: Как установить _ITERATOR_DEBUG_LEVEL в VS2010?
Ответ 3
Я нашел другой способ генерировать эти ошибки.
Я использовал пакетную сборку Visual Studio 2010 для создания всех возможных комбинаций платформы и конфигурации, и я получал эти ошибки. Глядя на результат, выяснилось, что пакетная сборка не оправдывала зависимостей проекта, поэтому связывает устаревшую библиотеку с сборкой Release с недавно скомпилированным файлом obug Debug.
Несколько строк позже на выходе сборки построили версию Debug библиотеки.
Выполняя "пакетную сборку" вручную (т.е. вручную выбрав различные комбинации платформы и конфигурации), создала чистую сборку.
Мораль: не используйте пакетную сборку Visual Studio 2010. Я не знаю, исправили ли они это в более поздних версиях VS.