ошибка LNK2038: обнаружено несоответствие для _ITERATOR_DEBUG_LEVEL: значение 0 не соответствует значению 2 в main.obj - PullRequest
115 голосов
/ 06 октября 2011

Я прочитал много решений моей проблемы, но никто не помог. Я пытался очистить, восстановить. Переустановил visual 2010 и сменил профессиональную на окончательную. Но все же я не знаю, почему у меня есть эта ошибка. Мой проект выглядит так: 1 Exe Solution для проверки моей статической библиотеки. 1 Dll Solution статическая библиотека. Код, который конвертируется в dll, использует функцию из 1 lib, которая называется ClassificationFramework. Я предоставил эту библиотеку как заголовки и 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

Я обнаружил, что отладчик пропускает из-за неправильного пути к файлам 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, но также не помог.

Ответы [ 20 ]

2 голосов
/ 11 июня 2015

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

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

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

1 голос
/ 06 июня 2013

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

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

1 голос
/ 09 мая 2019

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

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

1 голос
/ 25 апреля 2018

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

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

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

1 голос
/ 20 июля 2014

Мне удалось избавиться от этой ошибки (в моем случае, используя Ogre3D + Bullet), изменив библиотеки зависимостей на отладочные версии в Свойствах проекта -> Линкер -> Ввод -> Дополнительные зависимости (VC10).

Я изменил BulletCollision.lib на BulletCollision_debug.lib (для настройки отладки), и он скомпилирован.

0 голосов
/ 24 марта 2018

Небольшое дополнение к приведенной выше справке: я получил ошибку несоответствия после добавления статической библиотеки в более старое решение 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
0 голосов
/ 01 марта 2013

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

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

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

0 голосов
/ 05 июня 2015

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

Удалениетот решил проблему.

0 голосов
/ 01 июня 2015

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

0 голосов
/ 11 июня 2014

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...