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

аюсь скомпилировать 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, а также значения по умолчанию.

ура

 morgancodes28 мая 2014 г., 21:12
Я хотел бы получить ответ на ваш вопрос № 1, который не находится в режиме выпуска. Это не ясно из сообщения об ошибке.

Ответы на вопрос(3)

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

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

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

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

Решение:

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

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

 thecoshman11 окт. 2012 г., 12:46
хорошая комбинация «здесь будет ответ» и «что это значит»
Решение Вопроса

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

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

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

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

 Öö Tiib21 янв. 2011 г., 04:09
Нет. На самом деле я пытался, так как JRTPLIB с открытым исходным кодом ... он прекрасно компилирует и связывает под VS 2010, как Release, так и Debug, без какой-либо специальной обработки.
 Öö Tiib19 янв. 2011 г., 20:49
Вы использовали опцию для jrtplib и client? Тогда что-то в коде как-то меняет это.
 KaiserJohaan21 янв. 2011 г., 14:06
Неважно, я решил это, это была глупая проблема .. У меня был старый отладочный .lib JRTPLIB в папке моего проекта, поэтому он связывался с этим вместо другой библиотеки, на которую есть ссылка>. <
 KaiserJohaan19 янв. 2011 г., 20:29
-D_ITERATOR_DEBUG_LEVEL = 0 в "C / C ++" -> Командная строка? Это ничего не меняет, все та же ошибка. Я добавил код, который вы упомянули, и он не сработал.
 KaiserJohaan19 янв. 2011 г., 21:29
неужели больше ничего нельзя сделать? Эти проблемы с компилятором действительно раздражают, тратят больше времени на их устранение, чем на кодирование>. <В VS2010 нет другого варианта?

Ваш ответ на вопрос