Frage

Nach dem durch einen langwierigen Prozess geht ein Projekt, mein DLL-Projekt im Debug-Modus aufbauen wird nicht umbenannt werden (Release baut Arbeit):

MSVCRTD.lib(msvcr90d.dll) : error LNK2005: _CrtDbgReportW already defined in LIBCMTD.lib(dbgrpt.obj)

Dieses Projekt und die fünf statischen Bibliotheken es hängt davon ab, festgelegt verwenden "Multi-Threaded-Debug (/ MTD)" (unter C / C ++ | Codegenerierung | Runtime Library). Ich glaube, Libcmtd.lib die eine für Multi-Threaded Debug ist, aber was ist MSVCRTD.lib, und was verursacht diese Fehler werden könnte?

Wenn es einen Unterschied macht, diese DLL ist für Windows CE.

War es hilfreich?

Lösung

LIBCMT ist, was Sie für / MT benötigen, MSVCRT ist, was Sie für / MD benötigen. Sie verknüpfen OBJ und LIB-Dateien, die gemischt waren, einige kompiliert mit / MT mit / MD einigen. Das ist nicht gut.

In der Regel ist es die LIB-Dateien, die das Problem verursachen. Überprüfen Sie ihre Build-Einstellungen und stellen Sie sicher, ihre / M Option die gleiche wie Ihre DLL-Projekt ist.

Auch passen sie von der Mühe, die Sie in bekommen, wenn die DLL mit / MT kompiliert wurde. Sie werden große Probleme haben, wenn die DLL zurückkehrt Zeiger auf Objekte, die der Client lösen muss. Es kann nicht, ist es nicht den gleichen Speicherzuordner verwenden.

Andere Tipps

Der MSDN-Artikel auf LNK4098 eine sehr nützliche Tabelle hat: es Ihnen sagt, welche Bibliotheken manuell auf die „Ignorieren spezifische Bibliothek“ -Liste hinzufügen, je nachdem, welche CRT Sie verwenden. In Ihrem Fall sollten Sie alle diese ignorieren:

libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib

Beachten Sie, dass die gemeldete Bibliothek in dieser Liste auch. Das Problem wird ausführlicher beschrieben in KB154753 ... Bibliotheken, dass ein Programm mit verbinden wird, wenn gebaut mit Visual C ++

Meine Interpretation ist, dass in bestimmten Situationen der Algorithmus, der automatisch Picks, die CRT-Bibliotheken Code zu verknüpfen mit mehreren widersprüchlichen Bibliotheken abholt.

Was ist Mitteilung zu setzen? eine DLL Multithreaded Debug-Einstellung kann zu Problemen führen, wenn Sie Speicher zuweisen, dass etwas die DLL versucht accesing zu befreien (sie werden in verschiedenen Haufen zugeordnet werden, zum Beispiel). Versuchen Sie, mit mehreren Threads Debug-DLL.

Ihr Link Problem entsteht, wahrscheinlich, weil eine Bibliothek, die Sie verknüpfen wird Multithreaded Debug-DLL erwartet, so dass die Linker versuchen beide zu verbinden und Ihre Verbindung ausfällt ...

Das Problem ist die msvcr90d.dll ist nicht in der Windows CE-Bild. Es muss mit der Anwendung bereitgestellt werden. Die msvcr90d.dll wird in $ (VCInstallDir) / ce / bin / $ (ARCHFAM) gelegen.

http://stackoverflow.com/questions/15959877/windows-ce-6-0-and-runtime-link-to-debug-dll-mdd

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