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
Ü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.
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?
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.