Frage

habe ich andere Beispiele von Menschen gefunden, dieses Problem haben, aber kein Glück mit ihren Lösungen gehabt haben. Ich versuche, std :: cout in einer statischen Bibliothek zu verwenden, die auch Boost-Threads und binden verwendet. Wenn ich und std::cout nicht kompiliert und Links in Ordnung mit dem Hauptprogramm, aber wenn ich tue, und ich die Bibliothek kompilieren habe ich keine Probleme, aber wenn ich das Hauptprogramm kompilieren und verknüpfen, dass die statische Bibliothek verwendet erhalte ich eine Tonne der Dinge wie:

2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in MSVCRTD.lib(cinitexe.obj)
2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in MSVCRTD.lib(cinitexe.obj)
2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in MSVCRTD.lib(cinitexe.obj)
2>LIBCMT.lib(mlock.obj) : error LNK2005: __unlock already defined in MSVCRTD.lib(MSVCR100D.dll)
2>LIBCMT.lib(mlock.obj) : error LNK2005: __lock already defined in MSVCRTD.lib(MSVCR100D.dll)
2>LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in MSVCRTD.lib(MSVCR100D.dll)
2>LIBCMT.lib(crt0.obj) : error LNK2005: _mainCRTStartup already defined in MSVCRTD.lib(crtexe.obj)

etc ...

Ich habe in meine Linker-Einstellungen versucht zu gehen und es aus der Verwendung der widerstreitenden Bibliothek in der Fehlerausgabe aufgelistet stoppen, aber ich kann es nicht richtig machen. Wenn ich ihm sagen, eine Bibliothek nicht mehr verwenden kann sie die Probleme beheben, aber geben Sie mir ein paar fehlenden externen Symbole, dann schalte ich die Bibliothek es hat Probleme mit, aber ich bekomme immer noch ein paar „bereits definiert“. Irgendwelche Hinweise auf das, was ich tun kann, um dieses Problem beheben? Sollte ich nur eine andere Klasse namens „log“ oder etwas und nur Zugang vom Haupt .exe (die die Strings Bibliothek verwenden würde, die Probleme wieder verursachen kann, aber ich habe es noch nicht ausprobiert)? Vielen Dank für jede Hilfe.

War es hilfreich?

Lösung

Versuchen Überprüfung -> Project + Eigenschaften, C / C ++, Code-Generierung, Runtime-Bibliothek. Ihre LIB und Ihr Hauptprojekt müssen die gleiche Einstellung hier verwenden.

Andere Tipps

Rechtsklick auf Ihr Projekt, Eigenschaften, C / C ++, Codegenerierung, Runtime Library-Einstellung. Das ist die Ursache des Problems. Einstellungen gibt es / MT und / MD. Sie verknüpfen Code, der Werte für diese Einstellung hat sich in Konflikt, muss alles mit dem gleichen kompiliert werden.

Erhöhung könnte derjenige sein. Prüfen Sie die Linker die zusätzliche Abhängigkeiten Einstellung. IIRC haben die .libs mt oder md in ihrem Namen.

LNK2005 tritt auf, wenn zwei Kompilation Objekte die gleichen Symbole enthalten. Wenn Sie versuchen, sie miteinander zu verbinden, die Linke nicht weiß, was mit der Tatsache zu tun hat, es Duplikate von allem, damit der Fehler.

Insbesondere es klingt wie Ihre statische lib / vielleicht Schub kann mit /MT kompiliert wurde, die die MSVC Laufzeit in statisch verknüpft. Es sieht aus wie Sie versuchen, Ihren Code mit den Standardoptionen (/MD, einen dynamischen Link zu MSVCR100.DLL, MSVCP100.DLL) zu kompilieren.

Siehe http://msdn.microsoft.com/en-us/library /2kzt1wy3.aspx

Sie können entweder neu erstellten die statische Bibliothek gewährleistet es gegen die dynamischen Bibliotheken verknüpft ist, oder versuchen statisch Code verknüpft.

Ich sollte hinzufügen, dass die D am Ende bedeutet nur, debuggen. das heißt MSVCP100D.DLL ist die Debug-Version von MSVCP100.DLL.

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