Frage

Ich habe eine Vorlage VS .NET 2003-Projekt, die Kollegen kopieren und anpassen, wenn ihre Software zu entwickeln.

Es erscheint die Vorlage einen geändert wurde vor einiger Zeit die IgnoreSpecificLibrary Eigenschaft festlegen für beiden Release haben libcmt.lib und Debug-Builds (dh sowohl für Release und Debug sollte die Build im Linker ignorieren libcmt.lib).

Einige Projekte auf dieser Basis sind seit gebaut worden, mit dem Release-Build (indem Sie durch das Projekt .map Datei evident) in LIBCMTD.LIB zieht die einige Runtime-Probleme verursacht zu haben scheint (dh ein Dialogfenster Wesen blitzte auf, als obwohl ein Breakpoint gesetzt worden ist).

Hat Einstellung IgnoreSpecificLibrary auszuschließen libcmt.lib automatisch das Projekt Link gegen LIBCMTD.LIB machen?

Was seltsam ist, dass der Aufbau der Schablone (mit der falschen Einstellung) Links gegen libcmt.lib während einige der kundenspezifischen Projekten (wenn auch nicht alle) Link gegen LIBCMTD.LIB.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Das ist, was passiert ist:

Nach dem Linker Kompilieren nimmt Ihre Objekt-Dateien und unter anderem erstellen eine Symboltabelle, die symol-Anforderung hat, die nicht erfüllt hat. Dann geht der Linker durch die Liste der Bibliotheken versuchen, Entschlossenheit jene unerfüllte Symbole. Da Sie libcmt.lib, Ihre Drittanbieter-Bibliothek ignorieren verlassen hat oder hinzugefügt, um eine Linker Anfrage einige ungelöste Symbole und enthält solche aus licmtd.lib (und vielleicht auch anderen Libs auch), da es zu lösen compilled mit Debug-Option wurde.

Wenn Sie libcmt.lib diese Symbole nicht außer Acht gelassen hatte, würde höchstwahrscheinlich aufgelöst werden von libcmt.lib und es gab von LIBCMTD.LIB keine Notwendigkeit, in Sachen zu ziehen (obwohl es würde betrachtet werden andere Symbole zu lösen, die noch unerfüllten waren)

Sie können versuchen, zu igmore auch Libcmtd.lib. Wenn Sie jetzt unresolvd Externen erhalten dann es war probebly nicht eine gute Idee, libcmt.dll zu ignorieren.

Andere Tipps

Viele Projekte ignorieren die libcmt.lib, weil es mit der dynamischen Version msvcrt.lib in Konflikt steht. Das Ignorieren LIBCMT im Linker macht das Projekt der Kompilierung mit msvcrt.lib

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top