2 Stimmen

Visual Studio .NET 2003 - Spezifische Bibliothek für libcmt vs libcmtd ignorieren

Ich habe ein VS .NET 2003-Vorlagenprojekt, das meine Kollegen kopieren und bei der Entwicklung ihrer Software anpassen.

Es scheint, dass die Vorlage vor einiger Zeit geändert wurde, um die IgnoreSpecificLibrary-Eigenschaft zu setzen, um libcmt.lib sowohl für Release- als auch für Debug-Builds zu haben (d.h. sowohl für Release- als auch für Debug-Builds sollte die libcmt.lib im Linker ignoriert werden).

Einige darauf basierende Projekte wurden seither erstellt, wobei das Release-Build die libcmtd.lib mit einbezog (ersichtlich durch einen Blick in die Projekt-.map-Datei), was einige Laufzeitprobleme verursacht zu haben scheint (z.B. ein Dialogfenster, das aufblinkte, als ob ein Haltepunkt gesetzt worden wäre).

Führt die Einstellung IgnoreSpecificLibrary zum Ausschluss von libcmt.lib automatisch dazu, dass das Projekt mit libcmtd.lib verknüpft wird?

Was seltsam ist, ist, dass das Erstellen der Vorlage (mit der falschen Einstellung) gegen libcmt.lib verlinkt, während einige der angepassten Projekte (jedoch nicht alle) gegen libcmtd.lib verlinken.

Irgendwelche Ideen?

2voto

Ghassen Hamrouni Punkte 3078

Viele Projekte ignorieren die libcmt.lib, weil sie in Konflikt mit der dynamischen Version msvcrt.lib steht. Das Ignorieren der libcmt im Linker lässt das Projekt mit der msvcrt.lib kompilieren

2voto

engf-010 Punkte 3892

Dies ist geschehen:

Nach dem Kompilieren nimmt der Linker Ihre Objektdateien und erstellt unter anderem eine Symboltabelle, die nicht erfüllte Symol-Anforderungen enthält. Dann geht der Linker durch die Liste der Bibliotheken und versucht, diese unerfüllten Symbole aufzulösen. Da Sie die libcmt.lib ignorieren, hat Ihre Drittanbieter-Bibliothek einige nicht aufgelöste Symbole hinterlassen oder hinzugefügt, und sie enthält eine Linker-Anforderung um diese von licmtd.lib (und vielleicht auch von anderen Bibliotheken) aufzulösen, da sie mit der Debug-Option kompiliert wurde.

Hätten Sie libcmt.lib nicht ignoriert, wären diese Symbole höchstwahrscheinlich von libcmt.lib aufgelöst worden von der libcmt.lib gelöst werden und es bestand keine Notwendigkeit, die libcmtd.lib zu verwenden (auch wenn auch wenn sie zur Auflösung anderer, noch nicht erfüllter Symbole herangezogen werden würde)

Sie können auch versuchen, libcmtd.lib zu igmore. Wenn Sie nun unaufgelöste Externals erhalten, dann war es wohl keine gute Idee, libcmt.dll zu ignorieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X