2010-11-02 7 views
32

Ich bin gerade über eine Visual Studio (C++) Lösung auf einen anderen Computer umgestiegen, habe alle Verzeichnisse und Einstellungen soweit ich sehen kann eingerichtet, und habe ein Säubern/Rebuild auf der Lösung. Ich bekomme den Fehler oben auf einer Reihe von OBJs beim Kompilieren, nicht sicher, was ich dagegen tun soll._iterator_debug_level Wert '0' stimmt nicht mit Wert '2' überein

Antwort

26

Es scheint, dass Sie Objektdateien mischen, die mit unterschiedlichen Einstellungen erstellt wurden. Versuchen Sie, eine vollständige saubere Neuerstellung durchzuführen, und überprüfen Sie alle Projektdateieinstellungen, um sicherzustellen, dass das _ITERATOR_DEBUG_LEVEL-Makro identisch ist (z. B. mischen Sie keine Debug- und Release-Build-Objekte).

+4

Aus irgendeinem Grund hatte eines meiner Projekte _SECURE_SCL = 1 im Freigabemodus definiert, und dies verursachte den Linker-Fehler. – Gyuri

+0

Eine andere Möglichkeit ist eine Projekt/Quelldatei, die _HAS_ITERATOR_DEBUGGING – korbes

16

Das Mischen von Binärdateien (Objektdateien) ist ein Grund; ein anderes (was ich angetroffen habe) ist die falsche Definition des Makros _DEBUG im Release-Build. _DEBUG ist kein Standardmakro, sondern wird von Microsoft verwendet.

Nach dem .vcxproj -Dateien in Emacs Bearbeitung vertippt ich _DEBUG statt NDEBUG für die Freigabe, und genau die gleichen Build-Fehler aufgetreten.

+0

bang on ...... definiert :) – Sandip

13

In einigen Fällen die Optionen in

Eigenschaften Mischen> Konfigurationseigenschaften> C/C++> Codegenerierung> Runtime Bibliothek

Zwischen Library (n) enthalten und aktuell Arbeitsprojekt kann dieses Problem verursachen.

Je nach Verwendung als /MD oder /MT oder /MDd oder /MTd einheitlich für alle Projekte festlegen.

+0

Danke, es hat funktioniert. – lourencoccc

0

Ich fand (seltsam), dass _CRT_NON_CONFORMING_SWPRINTFS verursacht es. Wenn ich es entferne, bekomme ich nicht "_iterator_debug_level Wert '0' entspricht nicht Wert '2'", sondern die folgende Warnung:

Fehler 6 Fehler C4996: '_swprintf': swprintf wurde geändert, um zu entsprechen mit dem ISO C-Standard, Hinzufügen eines zusätzlichen Zeichenanzahlsparameters. Legen Sie _CRT_NON_CONFORMING_SWPRINTFS fest, um traditionelles Microsoft-SWprintf zu verwenden.

0

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

Ich habe meine Bibliothek mehrmals neu konfiguriert, aber es hat nicht geholfen. Ich fand das Problem war, dass die Release-Version _DEBUG erbte, also habe ich es unter Projekteigenschaften >> Präprozessor >> Prozessordefinitionen deaktiviert und es wurde gelöst.

Verwandte Themen