Ich habe viele Lösungen für mein Problem gelesen, aber keine hat geholfen. Ich habe versucht, sauber zu machen, wieder aufzubauen. Visual 2010 neu installiert und von professionell zu ultimativ gewechselt. 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 der DLL-Lösung. Code, der in DLL konvertiert wird, verwendet die Funktion 1 lib namens ClassificationFramework. Ich habe diese Bibliothek als Header und CPP bereitgestellt, also im Grunde genommen als Quellcode. In der Exe-Lösung habe ich meine generierte Bibliothek + einige andere Bibliotheken verknüpft, um sie auszuführen + ClassificationFramework.dll. Alles funktioniert gut, wenn ich Release verwende, aber wenn ich zu Debug wechsle (weil ich einige Dinge debuggen möchte, habe ich es satt, 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
Als ich Release einbaute, 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 PDF-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-> Module gehe, sehe ich, dass er diese PDF-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 hat nicht geholfen. Ich habe Microsoft Server zum Laden von PDF-Dateien verwendet, aber auch nicht geholfen.
Ich mache ein kleines Update zu diesem Problem, da ich heute den gleichen Fehler bei einer Anwendung hatte, die mit einer statischen Bibliothek verknüpft ist, nachdem ich das alte Visual 6-Projekt auf Visual Studio 2012 migriert habe.
In meinem Fall war der Fehler, dass ich fälschlicherweise die Release-Version der statischen Bibliothek mit / MDd anstelle von / MD kompiliert habe , während die Anwendung / MD in Release ist. Das Festlegen der richtigen / MD im statischen lib-Projekt hat das Problem behoben.
Dies erfolgt in den Projekteigenschaften
quelle
Wenn Sie Ihr Projekt A in Release absichtlich mit einem anderen Projekt B in Debug verknüpfen möchten, beispielsweise um die allgemeinen Leistungsvorteile Ihrer Anwendung beim Debuggen beizubehalten, wird dieser Fehler wahrscheinlich auftreten. Sie können dies beheben, indem Sie die Präprozessor-Flags von Projekt B vorübergehend ändern, um das Iterator-Debugging zu deaktivieren (und es an Projekt A anzupassen):
Fügen Sie in den "Debug" -Eigenschaften von Projekt B, Konfigurationseigenschaften -> C / C ++ -> Präprozessor, Folgendes zu den Präprozessordefinitionen hinzu:
_HAS_ITERATOR_DEBUGGING = 0; _ITERATOR_DEBUG_LEVEL = 0;
Erstellen Sie Projekt B in Debug neu, und erstellen Sie dann Projekt A in Release. Die Verknüpfung sollte korrekt sein.
quelle
Ich hatte ein Missverhältnis zwischen Projekten: eines mit Multi-Byte-Zeichensatz, das andere mit Unicode. Wenn Sie diese korrigieren, um Unicode zu vereinbaren, wurde das Problem behoben.
quelle
Der Fehler kann durch Mischen von Debug-Builds und Release-Builds in derselben ausführbaren Datei oder DLL verursacht werden.
quelle
Ich hatte auch dieses Problem.
Mein Problem war, dass ich die Bibliotheksverzeichnisse aus meinen Debug-Konfigurationen kopiert / eingefügt hatte.
Das Projekt "Indep" enthielt also die statische Bibliothek "Dep.lib" von "../Debug", sogar in der Version. Das Update bestand darin, das Bibliotheksverzeichnis in "../Release" zu ändern, sodass ich die von der Version erstellte Bibliothek und nicht die zuvor erstellte Debug-Bibliothek abfing.
quelle
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.
quelle
Versuchen Sie, _DEBUG in den C ++ - Projekteigenschaften in die NDEBUG-Makrodefinition zu ändern (für die Release-Konfiguration). Konfigurationseigenschaften -> C / C ++ -> Präprozessor -> Präprozessordefinitionen
quelle
Letzte Chance (wenn andere Möglichkeiten nicht funktionieren): Definieren Sie in allen Projekten das Makro _ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH. Dadurch wird die Funktion "#pragma detect_mismatch" deaktiviert, die in CRT-Headern verwendet wird.
quelle
_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH
unter hinzuC/C++ >> Preprocessor >> PreprocessorDefinitions
.opencv_core245.lib (dxt.obj): Fehler LNK2038: Nichtübereinstimmung für '_ITERATOR_DEBUG_LEVEL' festgestellt: Wert '0' stimmt nicht mit Wert '2' in test.obj überein. Ich habe einen solchen Fehler erhalten.
Ich habe opencv_core245.lib und opencv_core245d.lib in Linker-> Eingabe-> Zusätzliche Abhängigkeit. Da diese beiden verwirrend waren, entfernte ich zuerst eine opencv_core245.lib. Fehler weg.
quelle
Versuchen Sie Folgendes: Gehe zu Projekteigenschaft -> C / C ++ -> Codegenerierung -> Laufzeitbibliothek Aus Combobox-Wert auswählen: Multithread-DLL (/ MD) Es funktioniert für mich :)
quelle
In meinem Fall bestand die Lösung sowohl für Debug als auch für Release darin, die gesamte Lösung zu bereinigen und dann neu zu erstellen.
Edit: true auch in meinem Fall (VS2017) Schritt 1: Bereinigen Sie das Projekt. Schritt 2: Ändern Sie den Konfigurationsmodus (von Debug zu Release oder umgekehrt). Schritt 3: Reinigen Sie das Projekt. Schritt 4: Erstellen Sie den erforderlichen Konfigurationsmodus.
PS: Um den Konfigurationsmodus zu ändern, finden Sie die Konfigurationseinstellungen im Build-Menü
quelle
Ich hatte heute das gleiche Problem (VS2010), ich habe Release | erstellt Win32, dann versucht, Debug | zu erstellen Win32 und bekam diese Nachricht.
Ich habe versucht, Debug | zu reinigen Win32, aber der Fehler blieb bestehen. Ich habe dann Release | gereinigt Win32, dann bereinigt Debug | Win32, und dann hat es gut gebaut.
quelle
Ich habe es geschafft, diesen Fehler zu beseitigen (in meinem Fall mit Ogre3D + Bullet), indem ich die Abhängigkeitsbibliotheken in den Debug-Versionen unter Projekteigenschaften -> Linker -> Eingabe -> Zusätzliche Abhängigkeiten (VC10) geändert habe.
Ich habe BulletCollision.lib in BulletCollision_debug.lib (für die Debug-Konfiguration) geändert und es kompiliert.
quelle
Ich habe mein Problem bei der Korrektur des "Zusätzlichen Bibliotheksverzeichnisses" behoben. Dieses hat "$ (SolutionDir) \ Release" falsch angegeben und in "$ (SolutionDir) \ $ (IntDir)" geändert.
Öffnen Sie zur Korrektur Ihre Projekteigenschaften -> Konfigurationseigenschaften -> Linker -> Allgemein -> Zusätzliches Bibliotheksverzeichnis
Ich hoffe das wird einigen Leuten mit den gleichen Schwierigkeiten helfen;)
quelle
Ich hatte auch dieses Problem und es entstand, weil ich das Projekt neu erstellt und dann vergessen habe, es in einem abhängigen Projekt durch Referenz neu zu verknüpfen.
Somit wurde unter Bezugnahme auf das alte Projekt anstelle des neuen verknüpft.
Es ist wichtig zu wissen, dass beim erneuten Hinzufügen eines zuvor verknüpften Projekts als Referenz ein Fehler vorliegt. Sie müssen die Referenz im vcxproj manuell löschen und können sie erst dann wieder hinzufügen. Dies ist laut msdn ein bekanntes Problem in Visual Studio.
quelle
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 Problemumgehung darin, nur den Inhalt der LIB-Datei zu ändern.
Öffnen Sie die .lib-Datei in einem Editor (ich habe PSPad verwendet, Bud Windows Notepad ist ebenfalls möglich) und ersetzen Sie alle Vorkommen von _ITERATOR_DEBUG_LEVEL = 2 durch _ITERATOR_DEBUG_LEVEL = 0
quelle
In meinem Fall musste die NDEBUG-Makrodefinition in den "Präprozessordefinitionen" in _DEBUG geändert werden. Ich erstelle eine statische Bibliothek zur Verwendung in einer EXE-Datei, die sich über denselben Fehler beschwert, der in der Frage aufgeführt ist. Gehen Sie zu Konfigurationseigenschaften (Menü "Projekt", Menüpunkt "Eigenschaften") und klicken Sie dann auf den Abschnitt C / C ++, dann auf den Abschnitt Präprozessor darunter. Bearbeiten Sie dann Ihre Präprozessordefinitionen, sodass NDEBUG in _DEBUG geändert wird (entsprechend dem Einstellung in der exe).
quelle
Wie alle anderen Antworten habe ich meine
Configuration Properties -> C/C++ -> Preprocessor
Anweisungen überprüft .In meinem Fall hatte ich das
NDEBUG
in Release richtig definiert, aber ich hatte auch :_SECURE_SCL=1
.Das Entfernen dieses Problems hat das Problem behoben.
quelle
Kleine Ergänzung zur obigen Hilfe: Ich habe den Mismatch-Fehler erhalten, nachdem ich einer älteren VST-Lösung mit VST 2017 ein statisches Libt hinzugefügt habe. VST generiert jetzt "stdfax.h" für vorkompilierte Header, die diese 2 Zeilen enthalten:
quelle