wake-up-neo.com

fehler LNK2038: Keine Übereinstimmung für '_ITERATOR_DEBUG_LEVEL' festgestellt: Wert '0' stimmt nicht mit Wert '2' in main.obj überein

Ich habe viele Lösungen für mein Problem gelesen, aber keine half. Ich habe versucht sauber zu bauen. Neu installiertes Visual 2010 und Wechsel von professionell zu ultimativ. 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 Statische Bibliothek für Dll-Lösung . Code, der in DLL konvertiert wird, verwendet die Funktion von 1 lib mit dem Namen ClassificationFramework. Ich habe diese lib als Header und cpp bereitgestellt, also im Grunde Quellcode. In der 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 Debugging wechsle (da ich einige Dinge debuggen möchte, bin ich es leid, den Debugger im Release-Modus zu überspringen), bekomme ich Folgendes:

    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 Release einbaue, bekam ich auch folgende 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 der Debugger wegen eines falschen Pfads 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 zu Debug-> Windows-> Modules 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 auch das half nicht. Ich habe Microsoft-Server verwendet, um pdb-Dateien zu laden, half aber auch nicht.

108
Qbunia

In VS2010 ist der Iterator-Debug-Level im Debugging standardmäßig auf 2 gesetzt und in der Version deaktiviert. In einer der DLLs, die Sie verwenden, ist wahrscheinlich das Debuggen von Iterator im Debugging deaktiviert, entweder weil es in einer älteren Version von Visual Studio erstellt wurde oder die Definitionen explizit dem Projekt hinzugefügt wurden.

Suchen Sie nach _ITERATOR_DEBUG_LEVEL und _SECURE_SCL, entfernen Sie sie oder legen Sie sie in allen Projekten und Quellen entsprechend fest und erstellen 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 wahrscheinlich Release- und Debug-DLLs. Verknüpfen Sie keine Release-DLLs in Debug oder umgekehrt!

133
AJG85

Ich mache ein kleines Update zu diesem Problem, da ich gerade den gleichen Fehler bei einer Anwendung hatte, die eine Verknüpfung mit einer statischen Bibliothek herstellt, nachdem ich das alte Visual 6-Projekt nach Visual Studio 2012 migriert hatte.

In meinem Fall bestand der Fehler darin, dass ich die Release-Version der statischen lib fälschlicherweise mit/MDd anstelle von/MD kompilierte, während die Anwendung/MD im Release ist. Durch Festlegen der korrekten/MD im statischen lib-Projekt wurde das Problem behoben.

Dies geschieht in Projekteigenschaften

  • Wählen Sie Konfigurationseigenschaften/C C++/Codegenerierung im Baum
  • und die Option Laufzeitbibliothek für alle Ihre Abhängigkeiten, Projekte und Anwendungen gleich.
92
Francis Pierot

Wenn Sie Ihr Projekt A in Release absichtlich mit einem anderen Projekt B in Debug verknüpfen möchten, um die allgemeinen Leistungsvorteile Ihrer Anwendung während des Debugging beizubehalten, wird dieser Fehler wahrscheinlich auftreten. Sie können dies beheben, indem Sie die Präprozessorflags von Projekt B vorübergehend ändern, um das Iterator-Debugging zu deaktivieren (und es mit Projekt A in Übereinstimmung bringen):

Fügen Sie in den "Debug" -Eigenschaften von Project B Konfigurationseigenschaften -> C/C++ -> Preprozessor den Preprozessor-Definitionen Folgendes hinzu:

_HAS_ITERATOR_DEBUGGING = 0; _ITERATOR_DEBUG_LEVEL = 0;

Erstellen Sie Projekt B in Debug neu, und erstellen Sie Projekt A in Release. Die Verknüpfung sollte nun korrekt sein.

19

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

10
stoney

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

  1. befinden sich im vs-Konfigurationsmanager einige Ihrer Projekte im Debug-Modus und einige im Freigabemodus?
  2. ist eines Ihrer Release-Projekte das Präprozessor-Symbol DEBUG oder _DEBUG definiert?
  3. ist eines Ihrer Debug-Projekte das Präprozessor-Symbol NDEBUG definiert?
9
Aviad Rozenhek

Ich hatte auch dieses Problem.

Mein Problem war, dass ich die Bibliotheksverzeichnisse aus meinen Debug-Konfigurationen kopieren/einfügen ließ.

Das Projekt "Indep" enthielt die statische Bibliothek "Dep.lib" aus "../Debug", sogar in der Veröffentlichung. Das Update bestand darin, das Bibliotheksverzeichnis in "../Release" zu ändern, sodass ich die Release-Bibliothek anstelle der zuvor erstellten Debug-Bibliothek einfing.

7
ArtHare

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

3
AlexT

In meinem Fall bestand sowohl für Debug als auch für Release die Lösung darin, die gesamte Lösung zu reinigen und neu zu erstellen. 

Bearbeiten: in meinem Fall auch wahr (VS2017) Schritt1: Reinigen Sie das Projekt . Schritt2: Ändern Sie den Konfigurationsmodus (von Debug zu Release oder umgekehrt) Schritt3: Reinigen Sie das Projekt . Schritt4 : Im erforderlichen Konfigurationsmodus erstellen. 

PS: Um den Konfigurationsmodus zu ändern, finden Sie die Konfigurationseinstellungen im Build-Menü

2
Ionut V.

Letzte Chance (wenn andere Wege nicht funktionieren): Das Makro _ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH in allen Projekten definieren. Dadurch wird die Funktion "#pragma detect_mismatch" deaktiviert, die in CRT-Headern verwendet wird.

2
Andrey

Versuchen Sie Folgendes: Gehen Sie zu Projekteigenschaft -> C/C++ -> Codegenerierung -> Laufzeitbibliothek Wählen Sie einen Combobox-Wert aus: Multi-Threaded DLL (/ MD) Das funktioniert bei mir :)

2
Phạm Mạnh

opencv_core245.lib (dxt.obj): Fehler LNK2038: Keine Übereinstimmung für '_ITERATOR_DEBUG_LEVEL' festgestellt: Wert '0' stimmt nicht mit Wert '2' in test.obj überein.
Ich habe opencv_core245.lib und opencv_core245d.lib in Linker-> Input-> Additional Dependenc. Da diese beiden verwirrend waren, entfernte ich zuerst eine opencv_core245.lib. Fehler gegangen

2
Vinit M

Ich hatte heute dasselbe Problem (VS2010), ich habe Release | gebaut Win32, versuchte dann, Debug | zu erstellen Win32 und erhielt diese Nachricht.

Ich habe versucht, Debug zu säubern Win32 aber der Fehler blieb bestehen . Dann habe ich Release | gesäubert Win32 und dann Debug | | Win32 und dann gut gebaut.

1
GilesDMiddleton

Es ist mir gelungen, diesen Fehler zu beseitigen (in meinem Fall mit Ogre3D + Bullet), indem ich die Abhängigkeitsbibliotheken in den Debugversionen unter Projekteigenschaften -> Linker -> Eingabe -> Zusätzliche Abhängigkeiten (VC10) änderte.

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

1
JTatie

Ich hatte das gleiche Problem zwischen Debug- und Release-Bibliotheken. Der Fehler lag in den Lösungseigenschaften/Konfigurationseigenschaften/Konfigurationen.

Die Projektkonfigurationen stimmten nicht mit der Hauptkonfiguration/Plattform überein.

1
Alstrice

Ich habe meine Probleme beim Korrigieren des "Zusätzlichen Bibliotheksverzeichnisses" behoben. Dieses war falsch, als "$ (SolutionDir)\Release" angegeben wurde. Ich habe es in "$ (SolutionDir)\$ (IntDir)" geändert.

Um dies zu korrigieren, öffnen Sie Ihre Projekteigenschaften -> Konfigurationseigenschaften -> Linker -> Allgemein -> Zusätzliches Bibliotheksverzeichnis

Ich hoffe das hilft einigen Leuten mit den gleichen Problemen;)

0
ThierryV

In meinem Fall musste die NDEBUG-Makrodefinition in den "Präprozessor-Definitionen" in _DEBUG geändert werden. Ich baue eine statische Bibliothek für die Verwendung in einer EXE-Datei, die sich über den gleichen Fehler beschwert, der in der Frage aufgeführt ist. Gehen Sie zu Konfigurationseigenschaften (Menü "Projekt", Menüpunkt "Eigenschaften") und klicken Sie auf den Abschnitt C/C++, dann auf den Abschnitt Preprozessor. Bearbeiten Sie dann Ihre Präprozessordefinitionen, sodass NDEBUG in _DEBUG geändert wird (entsprechend dem Einstellung im Exe).

0
Alyoshak

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

Es wurde also durch Bezugnahme auf das alte Projekt anstelle des neuen Projekts verlinkt. 

Es ist wichtig zu wissen, dass ein Fehler beim erneuten Hinzufügen eines zuvor verknüpften Projekts durch Verweis besteht. Sie müssen die Referenz in vcxproj manuell löschen und erst dann können Sie sie erneut hinzufügen. Dies ist ein bekanntes Problem in Visual Studio gemäß MSDN. 

0
Chris Woolfe

Ich hatte ein ähnliches Problem, aber die falsche Einstellung war in der externen LIB-Datei, aus der ich keine Quellen hatte. Wenn Sie nicht über die Quelldateien verfügen, besteht die einfachste Lösung darin, den Inhalt der .lib-Datei zu ändern.

Öffnen Sie die .lib-Datei in einem Editor (ich habe PSPad verwendet, Windows Notepad ist auch möglich) und ersetzen Sie alle Vorkommen von _ITERATOR_DEBUG_LEVEL = 2 bis _ITERATOR_DEBUG_LEVEL = 0

0
napets

Wie alle anderen Antworten habe ich meine Configuration Properties -> C/C++ -> Preprocessor-Direktiven überprüft.
In meinem Fall hatte ich die NDEBUG in Release richtig definiert, aber ich hatte auch: _SECURE_SCL=1.

Durch das Entfernen dieses Problems wurde das Problem behoben.

0
Coxy