2

Beobachten Sie diese schließen Szenario, auch wenn es scheint, als ob die gleichen wie meine vorherigen Fragen. Trotzdem bekomme ich keine Antwort. Also bitte nicht als Duplikat melden.Visual C++ Laufzeitbibliothek Linker Probleme

Ich habe ein Projekt, das 10 Abhängigkeiten hat. Zuerst kompilierte ich mit der/MTD-Option im C/C++ - Codegenerierungsabschnitt im Hauptprojekt und alle seine Abhängigkeiten werden erfolgreich erstellt.

Als nächstes habe ich die Option von/MTD nach/MDd geändert und wieder alle abhängigen Projekte werden erfolgreich erstellt. Aber für das Hauptprojekt werden die folgenden Fehler gemeldet:


LIBCMTD.lib(osfinfo.obj) : error LNK2005: __open_osfhandle already defined in MSVCRTD.lib(MSVCR80D.dll) 

LIBCMTD.lib(lseeki64.obj) : error LNK2005: __lseeki64 already defined in MSVCRTD.lib(MSVCR80D.dll) 


sqlite3x.lib(sqlite3x_command.obj) : error LNK2005: "protected: wchar_t * __thiscall std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >::_Myptr(void)" ([email protected][email protected][email protected][email protected]@@[email protected][email protected]@@[email protected]@IAEPA_WXZ) already defined in msvcprtd.lib(MSVCP80D.dll) 

MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: __mkdir already defined in LIBCMTD.lib(mkdir.obj) 

MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: __strdup already defined in 
LIBCMTD.lib(strdup.obj) 

    Creating library Debug/Application.lib and object Debug/Application.exp 
LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library 

LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library 

Wie kann ich dieses Problem beheben?

+0

Bearbeiten Sie Ihre ursprüngliche Frage fügen Sie mehr Details hinzu, anstatt die Frage zu wiederholen. Wenn Sie die Frage aktualisieren, wird sie auf die Startseite zurückgesetzt. Alternativ kannst du ein Kopfgeld hinzufügen, um mehr Aufmerksamkeit zu bekommen. – tvanfosson

+0

Kann jemand, der für den Abschluss gestimmt hat, auch mit dem Duplikat verlinken? Vielen Dank. –

+1

Duplizieren: http://stackoverflow.com/questions/925540/how-to-resolve-the-following-linker-errors-in-visualstudio – tvanfosson

Antwort

5

Sie können keine C-Laufzeitbibliotheken mischen. Wenn Sie eine Bibliothek oder ein Objekt kompiliert haben/MT (irgendetwas), können Sie nicht einfach mit/MD verknüpfen. Sie müssen mit dem threadsafe MSVCRT verknüpfen. Es gibt kein Wenn und Aber oder Aber es geht darum. Sie CAN Mix C Laufzeiten. Ich habe es immer am besten gefunden, sogar in Programmen, die kein Threading durchführen, einfach/MT zu verwenden.

Haben Sie eine Projektbereinigung ausgeführt, um bereits erstellte Objekte und Bibliotheken zu entfernen? Sie haben auch hier eine Abhängigkeit von SQLite, haben Sie das auch neu erstellt?

1

Wenn ein Bündel von statischen C++ Bibliothek sind alle miteinander verbunden sind, müssen sie alle haben/MTD oder haben sie alle müssen /MDd.You kein Projekt mit/MTD mit einem anderen Projekt mit/MDd

verknüpfen

Dies ist wahrscheinlich der Grund für Ihre Verknüpfungsfehler. Der Grund, warum Sie es nur in Ihrem Hauptprojekt bekommen, ist, dass Ihr Hauptprojekt das einzige Projekt ist, das die Verlinkung durchführt. Bitte teilen Sie uns mit, ob es Ihr Problem gelöst hat.

Ich erinnere mich, ich hatte einmal das gleiche Problem mit/MTD und/MDD und ich hatte sehr ähnliche Fehler.

0

Meine Antwort here könnte eine Hilfe sein, Link zu einigen MSDN-Artikeln, die ich sehr nützlich bei der Lösung meiner Version dieses Problems gefunden habe.