ошибка 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, но также не помог.

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

Найдите _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 dlls. Не связывайте выпуски dll в отладке или наоборот!

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

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

Это делается в свойствах проекта

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

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

В свойствах «Отладки» проекта B свойства «Конфигурация» -> C / C ++ -> Препроцессор, добавьте следующие определения препроцессора:

_HAS_ITERATOR_DEBUGGING = 0; _ITERATOR_DEBUG_LEVEL = 0;

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

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

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

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

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

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

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

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

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. Ошибка исчезла.

Попробуйте следующее: Goto project property -> C / C ++ -> Генерация кода -> Библиотека времени выполнения Выберите из значения combobox: Многопоточная DLL (/ MD) Работает для меня 🙂

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

define _HAS_ITERATOR_DEBUGGING 0

, Я прокомментировал #define, чтобы исправить ошибку несоответствия. (Переполнение стека PS переформатирует это странно)

Я решил проблему с исправлением «Дополнительного каталога библиотек», это было неправильно при указании «$ (SolutionDir) \ Release», я изменил его в «$ (SolutionDir) \ $ (IntDir)»

Чтобы исправить это, откройте свои свойства проекта -> Свойства конфигурации -> Коннектор -> Общие -> Дополнительные библиотеки

Надеюсь, это поможет некоторым поэтам с такими же проблемами;)

Interesting Posts
Давайте будем гением компьютера.