webentwicklung-frage-antwort-db.com.de

_iterator_debug_level value '0' stimmt nicht mit value '2' überein

Ich bin gerade über eine Visual Studio (C++) -Lösung auf einen anderen Computer gewechselt, habe alle Verzeichnisse und Einstellungen so weit wie möglich eingerichtet und die Lösung bereinigt/neu erstellt. Ich erhalte den obigen Fehler bei einer Reihe von .objs beim Kompilieren und bin mir nicht sicher, was ich dagegen tun soll.

38
tweetypi

Anscheinend mischen Sie Objektdateien, die mit unterschiedlichen Einstellungen erstellt wurden. Versuchen Sie, eine vollständige, saubere Neuerstellung durchzuführen, und überprüfen Sie alle Einstellungen der Projektdatei, um sicherzustellen, dass das Makro _ITERATOR_DEBUG_LEVEL dasselbe ist (z. B. Sie mischen Debugging nicht und geben erstellte Objekte frei).

29

Das Mischen von Binärdateien (Objektdateien) ist ein Grund; eine andere (auf die ich gestoßen bin) ist die falsche Definition des _DEBUG-Makro im Release-Build. _DEBUG ist kein Standardmakro, sondern wird von Microsoft verwendet.

Nach der Bearbeitung der .vcxproj - Datei in Emacs habe ich _DEBUG anstelle von NDEBUG für das Release, und es ist genau derselbe Buildfehler aufgetreten.

17

In einigen Fällen mischen die Optionen in

Eigenschaften> Konfigurationseigenschaften> C/C++> Codegenerierung> Laufzeitbibliothek

Zwischen mitgelieferte Bibliothek (en) und aktuell laufendes Projekt kann dieses Problem auftreten.

Je nach Verwendung als /MD oder /MT oder /MDd oder /MTd über alle Projekte hinweg einheitlich.

Ich habe fünf Tage lang versucht, dieses Problem zu lösen. Der Code der Point Cloud Library (PCL) wird im Debug-Modus erfolgreich erstellt, schlägt jedoch im Release-Modus fehl.

Ich habe meine Bibliothek mehrmals neu konfiguriert, aber es hat nicht geholfen. Ich fand das Problem, dass die Release-Version _DEBUG erbte und deaktivierte es unter Projekteigenschaften >> Präprozessor >> Prozessordefinitionen und es wurde behoben.

1
John Duke

Ich fand heraus (seltsamerweise), dass _CRT_NON_CONFORMING_SWPRINTFS es verursacht. Wenn ich es entferne, erhalte ich nicht "_iterator_debug_level value '0' stimmt nicht mit value '2' überein", sondern die folgende Warnung:

Fehler 6 Fehler C4996: '_swprintf': swprintf wurde geändert, um dem ISO C-Standard zu entsprechen, und es wurde ein zusätzlicher Parameter für die Anzahl der Zeichen hinzugefügt. Legen Sie _CRT_NON_CONFORMING_SWPRINTFS fest, um die herkömmliche Microsoft-Funktion swprintf zu verwenden.

0