wake-up-neo.net

_ITERATOR_DEBUG_LEVEL Fehler in Visual Studio

Ich versuche, JRTPLIB in Visual Studio 2010 unter Windows 7 zu kompilieren. Es war ein echter Alptraum ... aber ich bin zumindest der Ansicht, dass die Probleme eingegrenzt werden.

Das ist noch übrig.

Error   3   error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in client.obj   C:\Users\Johan-bar\Documents\Visual Studio 2010\Projects\client\client\jrtplib.lib(rtpsession.obj)  client

Ich habe eine Tonne gegoogelt und die Ursache scheint zu sein, dass einer im Debug-Modus kompiliert wird, während der andere im Freigabemodus kompiliert wird.

Ich möchte eine ausführbare Release-Datei kompilieren, da ich auf verschiedenen Computern testen möchte.

1) Welcher ist nicht im Freigabemodus, JRTPLIB oder Client (meiner, der versucht zu kompilieren)?

2) Wie ändert man den ITERATOR_DEBUG_LEVEL? Beide verwenden die Laufzeitbibliothek/MT und die Präprozessor-Definitionen WIN32, _MT sowie die Standardwerte, die ich schätze.

Prost

21
KaiserJohaan

Übersetzen Sie alles, was Sie verwenden, mit der Option -D_ITERATOR_DEBUG_LEVEL = 0. Dies ist standardmäßig im VS 2010-Release-Modus der Fall, aber einige Komponenten werden noch mit anderen Optionen erstellt und sind daher nicht binärkompatibel.

In älteren Visual-Studios gab es _SECURE_SCL, und ich bin mir nicht sicher, ob der Code möglicherweise noch verwendet wird. Setzen Sie irgendwo (sagen wir in stdafx.h) eine statische Überprüfung, ob diese übereinstimmen. 

#if _ITERATOR_DEBUG_LEVEL == 0 && _SECURE_SCL != 0 
#error _SECURE_SCL != 0 while _ITERATOR_DEBUG_LEVEL == 0 
#endif 

Wenn Sie sehen möchten, welchen Wert _ITERATOR_DEBUG_LEVEL hat, können Sie eine #pragma-Nachricht im Code verwenden, um Sie darüber zu informieren. 

12
Öö Tiib

Die Lösung:

Project Pages >> Configuration Properties >> C,C++ >> Preprocessor >> Preprocessor Definitions

Fügen Sie dort _ITERATOR_DEBUG_LEVEL=0 hinzu. Siehe auch: Wie wird _ITERATOR_DEBUG_LEVEL in VS2010 gesetzt?

7
RIK

Ich habe einen anderen Weg gefunden, um diese Fehler zu erzeugen. 

Ich habe den Batch-Build von Visual Studio 2010 verwendet, um alle möglichen Kombinationen von Plattform und Konfiguration zu erstellen, und ich erhielt diese Fehler. Ein Blick auf die Ausgabe ergab, dass der Batch-Build die Projektabhängigkeiten nicht einhielt. Daher wurde eine veraltete Bibliothek aus dem Release-Build mit einer frisch kompilierten Debug-Obj-Datei verknüpft. 

Einige Zeilen später in der Build-Ausgabe wurde die Debug-Version der Bibliothek erstellt.

Durch das manuelle Erstellen des "Batch Builds" (d. H. Manuelles Auswählen der verschiedenen Kombinationen von Plattform und Konfiguration) wurde ein sauberer Build erzeugt.

Moral: Verwenden Sie nicht den Batch-Build von Visual Studio 2010. Ich weiß nicht, ob sie dies in späteren Versionen von VS behoben haben.

0
Dale Wilson