Als Dll und Statische Library kompilieren



  • Hallo,
    ich versuche gerade für meine dll jetzt auch noch eine Statische Library zu machen, damit meine exe von der dll unabhängig ist.

    Den header file habe ich jetzt so abgeändert:

    #ifdef CONTROLS_STATIC
    #define CONTROLSDLL_API
    #elif defined CONTROLSDLL_EXPORTS
    #define CONTROLSDLL_API __declspec(dllexport)
    #else
    #define CONTROLSDLL_API __declspec(dllimport)
    #endif
    

    die Library wird auch richtig kompiliert, aber wenn ich Sie ins Projekt einbinde, dan bekomme ich diese link Fehler:

    1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __int64 __thiscall std::ios_base::precision(__int64)" (?precision@ios_base@std@@QAE_J_J@Z) ist bereits in libcpmt.lib(iomanip.obj) definiert.
    1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) ist bereits in LIBCMT.lib(typinfo.obj) definiert.
    1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) ist bereits in LIBCMT.lib(typinfo.obj) definiert.
    1>LINK : warning LNK4098: Standardbibliothek "MSVCRT" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.

    Wieso passiert das?

    Vielen Dank
    Johannes



  • Entweder du linkst statisch oder dynamisch. Beides geht nicht.



  • Das ist mir schon klar, ich will nur beides für meine Projekte verfügbar haben, und mit der Dll get's auch, aber wenn die Statische Library linke, dann bekomme ich die oben gelisteten Fehler.



  • Mir ist gerade aufgefallen das ich das Problem in diesem Projekt mit allen Statischen Libraries habe die in anderen Projekten aber gut funktionieren, also muss das Problem vom Project sein, was kann den so etwas verursachen?



  • Das Problem ist, dass deine Anwendung und deine Library verschiedene Versionen der Runtime linken. Eine verwendet vermutlich die statische und eine die dynamische Laufzeitbibliothek. Dinge, die statisch gelinked werden sollen, müssen aber die selbe Laufzeitbibliothek benutzen...



  • Vielen Dank, das wars!!! Ich dumkopf! 😃


Anmelden zum Antworten