Подтвердить что ты не робот

Ошибка _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, а также значения по умолчанию, которые я предполагаю.

Приветствия

4b9b3361

Ответ 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 в коде, чтобы сообщить вам.

Ответ 3

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

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

Несколько строк позже на выходе сборки построили версию Debug библиотеки.

Выполняя "пакетную сборку" вручную (т.е. вручную выбрав различные комбинации платформы и конфигурации), создала чистую сборку.

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