c++ - with - debug linker errors




Fehler LNK2038: Diskrepanz für '_ITERATOR_DEBUG_LEVEL' erkannt: Wert '0' stimmt nicht mit Wert '2' in main.obj überein (13)

Ich habe viele Lösungen für mein Problem gelesen, aber keine geholfen. Ich habe versucht, sauber, umbauen. Visual 2010 neu installiert und von Professional auf Ultimate umgestellt. Aber ich weiß immer noch nicht, warum ich diesen Fehler habe. Mein Projekt sieht folgendermaßen aus: 1 Exe-Lösung zum Testen meiner statischen Bibliothek. 1 Dll Solution statische Bibliothek. Code, der in dll konvertiert wird, verwendet die Funktion von 1 lib namens ClassificationFramework. Ich habe diese lib als Header und cpp im Grunde Quellcode zur Verfügung gestellt. In Exe-Lösung habe ich meine generierte Bibliothek + einige andere Bibliotheken verlinkt, um sie + ClassificationFramework.dll auszuführen. Alles funktioniert gut, wenn ich Release benutze, aber wenn ich zu Debug wechseln (weil ich einige Sachen debuggen will, bin ich es leid, den Debugger im Release-Modus zu überspringen).

    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

Wenn ich in Release einbaut habe ich auch diese Warnungen:

    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

Ich habe festgestellt, dass Debugger wegen falscher Pfad zu PDB-Dateien überspringt.

'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).

Wenn ich auf Debug-> Windows-> Module gehe, sehe ich, dass er diese pdb-Dateien oder etwas nicht finden kann. Wie kann ich ihm sagen, dass diese Dateien hier und hier sind? Ich habe versucht, MSvisual als Administrator auszuführen, aber das hat auch nicht geholfen. Ich benutzte Microsoft-Server, um pdb Dateien zu laden, aber half auch nicht.


Der Fehler kann durch Mischen von Debug-Builds und Build-Releases in derselben ausführbaren Datei oder DLL verursacht werden.

  1. Sind im vs-Konfigurationsmanager einige Ihrer Projekte im Debug-Modus und einige im Release-Modus?
  2. Ist eines Ihrer Release-Projekte mit dem Präprozessorsymbol DEBUG oder _DEBUG definiert?
  3. Ist bei einem Ihrer Debug-Projekte das Präprozessorsymbol NDEBUG definiert?

Ich habe es geschafft, diesen Fehler loszuwerden (in meinem Fall mit Ogre3D + Bullet), indem ich die Abhängigkeitsbibliotheken zu den Debug-Versionen in Projekteigenschaften -> Linker -> Eingabe -> Zusätzliche Abhängigkeiten (VC10) änderte.

Ich habe BulletCollision.lib in BulletCollision_debug.lib geändert (für die Debug-Konfiguration) und es kompiliert.


Ich hatte ähnliches Problem, aber die falsche Einstellung war in der externen .lib-Datei, aus der ich keine Quellen hatte. Wenn Sie die Quelldateien nicht haben , besteht die einfachste Problemumgehung darin, nur den Inhalt der LIB-Datei zu ändern.

Öffne die .lib Datei in einem Editor (ich habe PSPad verwendet, Knospe Windows Notepad ist auch möglich) und ersetze alle Vorkommen von _ITERATOR_DEBUG_LEVEL = 2 zu _ITERATOR_DEBUG_LEVEL = 0


Ich hatte auch dieses Problem und es entstand, weil ich das Projekt neu erstellte und dann vergaß, es durch Verweis in einem abhängigen Projekt neu zu verknüpfen.

So wurde anstelle des Neuen auf das alte Projekt Bezug genommen.

Es ist wichtig zu wissen, dass es einen Fehler beim erneuten Hinzufügen eines zuvor verknüpften Projekts durch Verweis gibt. Sie müssen den Verweis manuell in vcxproj löschen und nur dann können Sie ihn erneut hinzufügen. Dies ist ein bekanntes Problem in Visual Studio nach msdn.


Ich hatte ein Missverhältnis zwischen Projekten: eins mit Multi-Byte-Zeichensatz, das andere mit Unicode. Wenn Sie diese korrigieren, um Unicode zu vereinbaren, wurde das Problem behoben.


Ich hatte heute das selbe Problem (VS2010), ich habe Release erstellt Win32, dann versucht, Debug | zu bauen Win32, und habe diese Nachricht erhalten.

Ich habe versucht, Debug | Win32, aber der Fehler ist weiterhin vorhanden. Ich habe dann Release | gereinigt Win32, dann bereinigt Debug | Win32, und dann hat es gut gebaut.


In VS2010 ist die Iterator-Debug-Ebene standardmäßig auf 2 gesetzt und wird in Release deaktiviert. Eine der dlls, die Sie verwenden, hat wahrscheinlich das Debuggen von Iteratoren im Debug deaktiviert, entweder weil es in einer älteren Version von Visual Studio erstellt wurde, oder sie haben die Definitionen dem Projekt explizit hinzugefügt.

Suchen Sie nach _ITERATOR_DEBUG_LEVEL und _SECURE_SCL entfernen Sie sie oder setzen Sie sie in allen Projekten und Quellen entsprechend und _SECURE_SCL Sie alles neu.

_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)

Kurz gesagt, Sie mischen Release- und Debug-DLLs. Verknüpfte Release Dlls nicht im Debug oder umgekehrt!


In meinem Fall bestand die Lösung für Debug und Release darin, die gesamte Lösung zu bereinigen und anschließend neu zu erstellen.


Kleiner Zusatz zur obigen Hilfe: Ich habe den Mismatch-Fehler nach dem Hinzufügen einer statischen Libto zu einer älteren VST-Lösung mit VST 2017 erhalten. VST generiert nun "stdfax.h" für vorkompilierte Header, die diese 2 Zeilen enthalten: // Schalten Sie das Iterator-Debugging aus, da es den Compiler bei großen Methoden in Debug-Builds sehr langsam macht

Definieren Sie _HAS_ITERATOR_DEBUGGING 0

. Ich habe das #define auskommentiert, um den Mismatch-Fehler zu beheben. (PS formatiert dies seltsam)


Letzte Chance (wenn andere Methoden nicht funktionieren): Definieren Sie das Makro _ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH in allen Projekten. Es wird "#pragma detect_mismatch" -Funktion deaktivieren, die in CRT-Headern verwendet wird.


Versuchen Sie, die Makrodefinition _DEBUG in NDEBUG in C ++ - Projekteigenschaften zu ändern (für die Release-Konfiguration) Konfigurationseigenschaften -> C / C ++ -> Präprozessor -> Präprozessordefinitionen


Wenn Sie Ihr Projekt A in Release absichtlich mit einem anderen Projekt B in Debug verbinden möchten, um beispielsweise die Gesamtleistung Ihrer Anwendung während des Debuggens beizubehalten, wird dieser Fehler wahrscheinlich auftreten. Sie können dies beheben, indem Sie vorübergehend die Präprozessor-Flags von Projekt B so ändern, dass das Iterator-Debugging deaktiviert wird (und es mit Projekt A übereinstimmt):

Fügen Sie in den "Debug" -Eigenschaften von Projekt B, Konfigurationseigenschaften -> C / C ++ -> Präprozessor, den Präprozessordefinitionen Folgendes hinzu:

_HAS_ITERATOR_DEBUGGING = 0; _ITERATOR_DEBUG_LEVEL = 0;

Erstellen Sie Projekt B in Debug, dann erstellen Sie Projekt A in Release und es sollte ordnungsgemäß verknüpfen.


opencv_core245.lib (dxt.obj): Fehler LNK2038: Mismatch für '_ITERATOR_DEBUG_LEVEL' erkannt: Wert '0' stimmt nicht mit Wert '2' in test.obj überein Ich habe einen Fehler wie diesen bekommen.
Ich habe opencv_core245.lib und opencv_core245d.lib in Linker-> Input-> Zusätzliche Abhängigkeiten. Da diese zwei confloticing waren, entfernte ich zuerst eine opencv_core245.lib. Fehler ist weg.