Я прочитал много решений моей проблемы, но ни одно из них не помогло. Я пробовал почистить, пересобрать. Переустановил Visual 2010 и сменил профессиональный на окончательный. Но все же я не знаю, почему у меня эта ошибка. Мой проект выглядит так: 1 Exe Решение для тестирования моей статической библиотеки. 1 статическая библиотека Dll Solution. Код, преобразованный в dll, использует функцию из 1 библиотеки под названием 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, но тоже не помог.
Я немного обновлю эту проблему, так как сегодня у меня была такая же ошибка в приложении, которое связывается со статической библиотекой, после того, как я перенес старый проект Visual 6 в Visual Studio 2012.
В моем случае ошибка заключалась в том, что я по ошибке скомпилировал версию статической библиотеки Release с / MDd вместо / MD , тогда как приложение находится в версии / MD . Установка правильного / MD в проекте статической библиотеки решила проблему.
Это делается в свойствах проекта.
источник
Если вы хотите намеренно связать свой проект A в Release с другим проектом B в Debug, скажем, чтобы сохранить общие преимущества производительности вашего приложения во время отладки, вы, скорее всего, столкнетесь с этой ошибкой. Вы можете исправить это, временно изменив флаги препроцессора проекта B, чтобы отключить отладку итератора (и сделать его соответствующим проекту A):
В свойствах «Отладка» проекта B, Свойства конфигурации -> C / C ++ -> Препроцессор, добавьте следующее в определения препроцессора:
_HAS_ITERATOR_DEBUGGING = 0; _ITERATOR_DEBUG_LEVEL = 0;
Перестройте проект B в Debug, затем соберите проект A в Release, и он должен правильно соединиться.
источник
У меня было несоответствие между проектами: один с многобайтовым набором символов, другой с Unicode. Исправление их для согласования с Unicode устранило проблему.
источник
Ошибка может быть вызвана смешиванием сборок отладки и сборок выпуска в одном исполняемом файле или dll.
источник
У меня тоже была эта проблема.
Моя проблема заключалась в том, что я скопировал / вставил каталоги, включающие библиотеку, из моих конфигураций отладки.
Так что проект «Indep» включал статическую библиотеку «Dep.lib» из «../Debug», даже в релиз. Исправление заключалось в том, чтобы изменить каталог библиотеки на "../Release", поэтому я поймал уже созданную библиотеку, а не ранее созданную библиотеку отладки.
источник
У меня была такая же проблема между библиотеками отладки и выпуска. Ошибка была в свойствах решения / свойствах конфигураций / конфигурациях.
Конфигурации проекта не соответствуют основной конфигурации / платформе.
источник
Попробуйте изменить определение макроса _DEBUG на NDEBUG в свойствах проекта C ++ (для конфигурации выпуска) Свойства конфигурации -> C / C ++ -> Препроцессор -> Определения препроцессора
источник
Последний шанс (если другие способы не работают): определите макрос _ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH во всех проектах. Это отключит функцию "#pragma detect_mismatch", которая используется в заголовках CRT.
источник
_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH
подC/C++ >> Preprocessor >> PreprocessorDefinitions
.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. Ошибка исчезла.
источник
Попробуйте это: Перейти к свойству проекта -> C / C ++ -> Генерация кода -> Библиотека времени выполнения Выберите из значения поля со списком: Многопоточная DLL (/ MD) Это работает для меня :)
источник
В моем случае и для отладки, и для выпуска решением было очистить, а затем перестроить все решение.
Изменить: верно и в моем случае (VS2017), шаг 1: очистить проект. Шаг 2: изменить режим конфигурации (от отладки к выпуску или наоборот). Шаг 3: очистите проект. Шаг 4: установите требуемый режим конфигурации.
PS: чтобы изменить режим конфигурации, найдите настройки конфигурации в меню сборки
источник
Сегодня у меня была такая же проблема (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 (для настройки отладки), и он скомпилирован.
источник
Я решил свою проблему с исправлением «Каталога дополнительных библиотек», в нем неправильно указывалось «$ (SolutionDir) \ Release», я изменил его в «$ (SolutionDir) \ $ (IntDir)»
Чтобы исправить это, откройте свойства проекта -> Свойства конфигурации -> Компоновщик -> Общие -> Каталог дополнительных библиотек.
Надеюсь, это поможет некоторым людям с той же проблемой;)
источник
У меня также была эта проблема, и она возникла из-за того, что я переделал проект, а затем забыл повторно связать его по ссылке в зависимом проекте.
Таким образом, ссылка была сделана на старый проект вместо нового.
Важно знать, что при повторном добавлении ранее связанного проекта по ссылке возникает ошибка. Вам нужно вручную удалить ссылку в vcxproj, и только после этого вы сможете повторно добавить ее. Согласно msdn, это известная проблема в Visual Studio.
источник
У меня была аналогичная проблема, но неправильная настройка была в файле extern .lib, из которого у меня не было источников. Если у вас нет исходных файлов , самый простой способ решения проблемы - просто изменить содержимое файла .lib.
Откройте файл .lib в редакторе (я использовал PSPad, также можно использовать блокнот для Windows) и замените все вхождения _ITERATOR_DEBUG_LEVEL = 2 на _ITERATOR_DEBUG_LEVEL = 0
источник
В моем случае определение макроса NDEBUG в «Определениях препроцессора» нужно было изменить на _DEBUG. Я создаю статическую библиотеку для использования в .exe, которая жаловалась на ту же ошибку, указанную в вопросе. Перейдите в Свойства конфигурации (меню «Проект», пункт меню «Свойства»), затем щелкните раздел C / C ++, затем раздел препроцессора под ним, а затем отредактируйте определения препроцессора так, чтобы NDEBUG был изменен на _DEBUG (чтобы соответствовать установка в exe).
источник
Как и все другие ответы, я проверил свои
Configuration Properties -> C/C++ -> Preprocessor
директивы.В моем случае я имел
NDEBUG
правильно определен в версии, но я также имел:_SECURE_SCL=1
.Удаление этого устранило проблему.
источник
Небольшое дополнение к приведенной выше справке: я получил ошибку несоответствия после добавления статической библиотеки в более старое решение VST с использованием VST 2017. VST теперь генерирует stdfax.h для предварительно скомпилированных заголовков, содержащих эти 2 строки:
источник