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

Я прочитал много решений для своей проблемы, но никто не помог. Я попробовал очистить, перестроить. Переустановите визуальный 2010 и измените его с профессионального на конечный. Но все же я не знаю, почему у меня такая ошибка. Мой проект выглядит так: 1 Exe Solution для тестирования моей статической библиотеки. 1 статическая библиотека решения DLL. Код, преобразованный в dll, использует функцию из 1 lib, называемой ClassificationFramework. Я предоставил эту lib в качестве заголовков и cpp, так что в основном исходный код. В решении Exe я связал свою созданную библиотеку + некоторые другие библиотеки, чтобы запустить ее + ClassificationFramework.dll. Все работает отлично, когда я использую Release, но когда я перехожу к Debug (потому что я хочу отлаживать некоторые вещи, я устал пропустить отладчик в режиме выпуска), я получаю следующее:

    2>Link:
    2>  ClassificationFramework.lib(SampleClass.obj) : MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the link command line to improve linker performance
    2>ClassificationFramework.lib(SampleClass.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj
    2>ClassificationFramework.lib(SampleNamesSet.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj
    2>ClassificationFramework.lib(SampleSet.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj
    2>ClassificationFramework.lib(DirectoryReader.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj
    2>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
    2>C:\Documents and Settings\Administrator\My Documents\Visual Studio 2010\Projects\Transformer\Debug\Tester.exe : fatal error LNK1319: 4 mismatches detected

Когда я создаю Release, я также получил следующие предупреждения:

    1>Link:
    1>  Generating code
    1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(101): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because ptimizations are disabled in function
    1>c:\users\kasia\documents\visual studio 2010\projects\classificationframework\classificationframework\directoryreader.cpp(30): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
    1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\xstring(1589): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
    1>c:\users\kasia\documents\visual studio 2010\projects\classificationframework\classificationframework\samplenamesset.cpp(226): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
    1>c:\users\kasia\documents\visual studio 2010\projects\classificationframework\classificationframework\directoryreader.cpp(60): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
    1>c:\users\kasia\documents\visual studio 2010\projects\classificationframework\classificationframework\samplenamesset.cpp(199): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
    1>c:\users\kasia\documents\visual studio 2010\projects\classificationframework\classificationframework\sampleset.cpp(27): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
    1>c:\users\kasia\documents\visual studio 2010\projects\classificationframework\classificationframework\samplenamesset.cpp(59): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
    1>  Finished generating code
    1>ClassificationFramework.lib(SampleSet.obj) : warning LNK4099: PDB 'vc100.pdb' was not found with 'ClassificationFramework.lib(SampleSet.obj)' or at 'C:\Documents and Settings\Administrator\My Documents\Visual Studio 2010\Projects\Transformer\Release\vc100.pdb'; linking object as if no debug info
    1>ClassificationFramework.lib(SampleNamesSet.obj) : warning LNK4099: PDB 'vc100.pdb' was not found with 'ClassificationFramework.lib(SampleNamesSet.obj)' or at 'C:\Documents and Settings\Administrator\My Documents\Visual Studio 2010\Projects\Transformer\Release\vc100.pdb'; linking object as if no debug info
    1>ClassificationFramework.lib(SampleClass.obj) : warning LNK4099: PDB 'vc100.pdb' was not found with 'ClassificationFramework.lib(SampleClass.obj)' or at 'C:\Documents and Settings\Administrator\My Documents\Visual Studio 2010\Projects\Transformer\Release\vc100.pdb'; linking object as if no debug info
    1>ClassificationFramework.lib(DirectoryReader.obj) : warning LNK4099: PDB 'vc100.pdb' was not found with 'ClassificationFramework.lib(DirectoryReader.obj)' or at 'C:\Documents and Settings\Administrator\My Documents\Visual Studio 2010\Projects\Transformer\Release\vc100.pdb'; linking object as if no debug info
    1>  Tester.vcxproj -> C:\Documents and Settings\Administrator\My Documents\Visual Studio 2010\Projects\Transformer\Release\Tester.exe

Я обнаружил, что Debugger пропускает из-за неправильного пути к файлам pdb.

'Tester.exe': Loaded 'C:\Documents and Settings\Administrator\My Documents\Visual Studio 2010\Projects\Work\Release\Tester.exe', Symbols loaded.
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\kernel32.dll', Cannot find or open the PDB file
'Tester.exe': Unloaded 'C:\WINDOWS\SysWOW64\kernel32.dll'
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\ntdll.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\kernel32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\OpenCV2.2\bin\opencv_core220.dll', Binary was not built with debug information.
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\msvcp100.dll', Symbols loaded.
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\msvcr100.dll', Symbols loaded.
'Tester.exe': Loaded 'C:\OpenCV2.2\bin\opencv_highgui220.dll', Binary was not built with debug information.
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\user32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\gdi32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\advapi32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\rpcrt4.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\secur32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\ole32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\msvcrt.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_5.82.3790.4770_x-ww_A689AB02\comctl32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\avifil32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\winmm.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\msacm32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\msvfw32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\shell32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\shlwapi.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\avicap32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\version.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\OpenCV2.2\bin\opencv_imgproc220.dll', Binary was not built with debug information.
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\imm32.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\lpk.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\SysWOW64\usp10.dll', Cannot find or open the PDB file
'Tester.exe': Loaded 'C:\WINDOWS\WinSxS\wow64_Microsoft.Windows.Common-        Controls_6595b64144ccf1df_6.0.3790.4770_x-ww_8D2E3180\comctl32.dll', Cannot find or open the PDB file
The program '[4984] Tester.exe: Native' has exited with code 0 (0x0).

Когда я иду в Debug- > Windows- > Modules, я вижу, что он не может найти эти файлы pdb или что-то в этом роде. Как я могу сказать ему, что эти файлы здесь и здесь? Я попытался запустить MSvisual как администратор, но это тоже не помогло. Я использовал сервер microsoft для загрузки файлов pdb, но также не помог.

Ответ 1

В VS2010 уровень отладки итератора по умолчанию равен 2 в отладке и отключен в выпуске. Одна из DLL, которую вы используете, вероятно, отключила отладку итератора при отладке либо потому, что она была построена в старой версии визуальной студии, либо явно добавила определения в проект.

Найдите _ITERATOR_DEBUG_LEVEL и _SECURE_SCL удалите их или установите их надлежащим образом во всех проектах и ​​источниках и перестройте все.

_ITERATOR_DEBUG_LEVEL = 0 // disabled (for release builds)
_ITERATOR_DEBUG_LEVEL = 1 // enabled (if _SECURE_SCL is defined)
_ITERATOR_DEBUG_LEVEL = 2 // enabled (for debug builds)

Короче говоря, вы, вероятно, микшируете выпуск и debug dll. Не связывайте выпадающие библиотеки DLL в отладке или наоборот!

Ответ 2

Я делаю небольшое обновление по этой проблеме, так как сегодня у меня была такая же ошибка в приложении, которое связано с статическим lib, после того как я перенес старый проект Visual 6 в Visual Studio 2012.

В моем случае ошибка заключалась в том, что я ошибочно скомпилировал версию Release статической lib с /MDd вместо /MD, тогда как приложение /MD в выпуске. Установка правильного /MD в статическом проекте lib решила проблему.

Это выполняется в Свойствах проекта

  • Выберите Свойства конфигурации /C С++/Генерация кода в дереве
  • а опция Runtime Library установлена ​​одинаково во всех ваших проектах зависимостей и приложении.

Ответ 3

Если вы хотите намеренно связать свой проект A в выпуске с другим проектом B в Debug, скажем, чтобы сохранить общие преимущества производительности вашего приложения во время отладки, вы, скорее всего, ударите эту ошибку. Вы можете исправить это, временно изменив флаги препроцессора проекта B, чтобы отключить отладку итератора (и сделать его совпадением с проектом A):

В свойствах "Отладка" проекта "В", "Свойства конфигурации" → "C/С++ → ", "Предпроцессор", добавьте следующее в определения препроцессора:

_HAS_ITERATOR_DEBUGGING = 0; _ITERATOR_DEBUG_LEVEL = 0;

Восстановите проект B в Debug, затем создайте проект A в Release и он должен правильно установить ссылку.

Ответ 4

У меня было несоответствие между проектами: одно с многобайтовым набором символов, другое с Unicode. Исправление этих вопросов для согласования Unicode исправило проблему.

Ответ 5

Ошибка может быть вызвана смешением сборки отладки и выпуском сборки в том же исполняемом файле или dll.

  • в диспетчере конфигурации vs - некоторые из ваших проектов в режиме отладки, а некоторые в режиме выпуска?
  • - один из ваших проектов выпуска имеет символ препроцессора DEBUG или _DEBUG?
  • - один из ваших проектов отладки имеет символ препроцессора, определенный NDEBUG?

Ответ 6

У меня тоже была эта проблема.

Моя проблема заключалась в том, что у меня была копия/вставка библиотеки, включающая в себя каталоги из моих конфигураций отладки.

Таким образом, проект "Indep" включал статическую библиотеку "Dep.lib" из "../Debug", даже в выпуске. Исправление заключалось в том, чтобы сменить каталог библиотеки на "../Release", поэтому я поймал библиотеку с выпуском, а не ранее созданную библиотеку отладки.

Ответ 7

Попробуйте изменить _DEBUG на определение макроса NDEBUG в свойствах проекта С++ (для конфигурации Release) Свойства конфигурации → C/С++ → Препроцессор → Определения препроцессора

Ответ 8

opencv_core245.lib(dxt.obj): ошибка LNK2038: обнаружено несоответствие для '_ITERATOR_DEBUG_LEVEL': значение '0' не соответствует значению '2' в test.obj. Я получил ошибку, подобную этой.
У меня есть opencv_core245.lib и opencv_core245d.lib в Linker- > Input- > Additional dependenc. Поскольку эти два были закрыты, я удалил сначала файл opencv_core245.lib. Ошибка исчезла.

Ответ 9

Попробуйте следующее: Перейти к свойству проекта → C/С++ → Генерация кода → Библиотека времени выполнения Выберите значение combobox: многопоточная DLL (/MD) Это работает для меня:)

Ответ 10

Последний шанс (если другие способы не работают): определите макрос _ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH во всех проектах. Он отключит функцию #pragma detect_mismatch, которая используется в заголовках CRT.

Ответ 11

В моем случае для Debug и Release решение заключалось в том, чтобы очистить, а затем перестроить все решение.

Edit: true в моем случае также (VS2017) step1: очистить проект. шаг 2: изменить режим конфигурации (с отладки на выпуск или наоборот). Шаг 3: очистить проект. Шаг 4: встроить в нужный режим конфигурации.

PS: чтобы изменить режим конфигурации, найдите настройки конфигурации в меню сборки

Ответ 12

У меня была такая же проблема сегодня (VS2010), я построил Release | Win32, затем попытался создать Debug | Win32, и получил это сообщение.

Я попробовал очистить Debug | Win32, но ошибка все еще сохраняется. Затем я очистил Release | Win32, затем очистить Debug | Win32, а затем он был построен отлично.

Ответ 13

Мне удалось избавиться от этой ошибки (в моем случае с использованием Ogre3D + Bullet), изменив библиотеки зависимостей на версии отладки в Project Properties → Linker → Input → Additional Dependencies (VC10).

Я изменил BulletCollision.lib на BulletCollision_debug.lib(для конфигурации отладки) и скомпилировал его.

Ответ 14

Я решил свою проблему с исправлением "Каталога дополнительных библиотек", этот был неправильным при указании "$ (SolutionDir)\Release", я изменил его в "$ (SolutionDir)\$ (IntDir)"

Чтобы исправить это, откройте свойства вашего проекта → Свойства конфигурации → Компоновщик → Общие → Каталог дополнительных библиотек

Я надеюсь, что это поможет некоторым людям с такой же проблемой;)

Ответ 15

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

Таким образом, он привязывался по ссылке на старый проект вместо нового.

Важно знать, что есть ошибка в повторном добавлении ранее связанного проекта по ссылке. Вам нужно вручную удалить ссылку в vcxproj, и только тогда вы сможете ее повторно добавить. Это известная проблема в Visual studio в соответствии с msdn.

Ответ 16

У меня была аналогичная проблема, но неправильная настройка была в файле extern.lib, из которого у меня не было источников. Если у вас нет исходных файлов, самым простым обходным путем является простое изменение содержимого файла .lib.

Откройте файл .lib в редакторе (я также использовал PSPad, почтовый блокнот Windows) и заменил все вхождения _ITERATOR_DEBUG_LEVEL = 2 на _ITERATOR_DEBUG_LEVEL = 0

Ответ 17

В моем случае определение макроса NDEBUG в "Определениях препроцессора" необходимо изменить на _DEBUG. Я создаю статическую библиотеку для использования в .exe, которая жаловалась на ту же самую ошибку, указанную в вопросе. Перейдите в раздел "Свойства конфигурации" (меню "Проект", пункт "Свойства" ), а затем выберите раздел "С/C++", раздел "Препроцессор" под ним, а затем отредактируйте определения препроцессора, чтобы NDEBUG был изменен на _DEBUG (чтобы соответствовать установка в exe).

Ответ 18

Как и все другие ответы, я проверил свои директивы Configuration Properties -> C/C++ -> Preprocessor.
В моем случае у меня был NDEBUG, правильно определенный в Release, но у меня также было: _SECURE_SCL=1.

Удаление этого исправлено.

Ответ 19

У меня была такая же проблема между библиотеками отладки и выпуска. Ошибка была в свойствах решения/свойствах конфигураций/конфигурациях.

Конфигурация проектов не соответствует основной конфигурации/платформе.

Ответ 20

Небольшое дополнение к приведенной выше справке: я получил ошибку несоответствия после добавления статической libto в старое решение VST, использующее VST 2017. VST теперь генерирует "stdfax.h" для предварительно скомпилированных заголовков, содержащих эти 2 строки:

// Turn off iterator debugging as it makes the compiler very slow on large methods in debug builds
#define _HAS_ITERATOR_DEBUGGING 0