Linkerfehler beim Einbinden der ID3lib-Bibliothek in Windows-Forms-Anwendung



  • Hallo,
    habe ein ähnliches Problem, deshalb krame ich den thread nochmal hervor. Habe auch zwei libs in einem WindowsForms(CLI)-Projekt eingebunden und Linker-Fehler erhalten. Ich verwende Beispiel-Code aus einem Konsolen-Projekt wo alles funktioniert. Habe dann mal den Schalter auf (/clr) gesetzt. Jetzt bekomme ich aber wieder andere Fehler:

    1>msvcprtd.lib(MSVCP100D.dll) : error LNK2005: "public: class std::locale::facet * __thiscall std::locale::facet::_Decref(void)" (?_Decref@facet@locale@std@@QAEPAV123@XZ) ist bereits in libhasp_cpp_windows_mt_d.lib(haspimpl.obj) definiert.
    1>libcpmtd.lib(ios.obj) : error LNK2005: "private: static void __cdecl std::ios_base::_Ios_base_dtor(class std::ios_base *)" (?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z) ist bereits in msvcprtd.lib(MSVCP100D.dll) definiert.
    1>libcpmtd.lib(ios.obj) : error LNK2005: "public: static void __cdecl std::ios_base::_Addstd(class std::ios_base *)" (?_Addstd@ios_base@std@@SAXPAV12@@Z) ist bereits in msvcprtd.lib(MSVCP100D.dll) definiert.
    1>libcpmtd.lib(locale0.obj) : error LNK2005: "private: static void __cdecl std::locale::facet::_Facet_Register(class std::locale::facet *)" (?_Facet_Register@facet@locale@std@@CAXPAV123@@Z) ist bereits in msvcprtd.lib(locale0_implib.obj) definiert.
    1>libcpmtd.lib(locale0.obj) : error LNK2005: "private: static class std::locale::_Locimp * __cdecl std::locale::_Getgloballocale(void)" (?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ) ist bereits in msvcprtd.lib(MSVCP100D.dll) definiert.
    1>libcpmtd.lib(locale0.obj) : error LNK2005: "private: static class std::locale::_Locimp * __cdecl std::locale::_Init(void)" (?_Init@locale@std@@CAPAV_Locimp@12@XZ) ist bereits in msvcprtd.lib(MSVCP100D.dll) definiert.
    1>libcpmtd.lib(locale0.obj) : error LNK2005: "public: static void __cdecl std::_Locinfo::_Locinfo_ctor(class std::_Locinfo *,char const *)" (?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@PBD@Z) ist bereits in msvcprtd.lib(MSVCP100D.dll) definiert.
    1>libcpmtd.lib(locale0.obj) : error LNK2005: "public: static void __cdecl std::_Locinfo::_Locinfo_dtor(class std::_Locinfo *)" (?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z) ist bereits in msvcprtd.lib(MSVCP100D.dll) definiert.
    1>libcpmtd.lib(xlock.obj) : error LNK2005: "public: __thiscall std::_Lockit::_Lockit(int)" (??0_Lockit@std@@QAE@H@Z) ist bereits in msvcprtd.lib(MSVCP100D.dll) definiert.
    1>libcpmtd.lib(xlock.obj) : error LNK2005: "public: __thiscall std::_Lockit::~_Lockit(void)" (??1_Lockit@std@@QAE@XZ) ist bereits in msvcprtd.lib(MSVCP100D.dll) definiert.
    

    Kann mir jemand sagen was da schief läuft?


  • Mod

    Entweder ist Dein Lib-statisch gegen Dein Programm gelinkt, oder Dein Programm.
    D.h. Du musst Dein Programm auf die gleiche CRT-Einstellung bringen für die die Lib gebaut wurde.

    Die CLR Einstellungen haben damit nichts zu tun. Die sollten eigentlich aus sein.



  • Danke erstmal für die Antwort.
    Könntest du das etwas genauer erläutern was ich da tun muss?
    Bin noch Anfänger auf dem Gebiet 😞



  • xXMartinoXx schrieb:

    Hallo,
    habe ein ähnliches Problem, deshalb krame ich den thread nochmal hervor. Habe auch zwei libs in einem WindowsForms(CLI)-Projekt eingebunden und Linker-Fehler erhalten....

    1>msvcprtd.lib(MSVCP100D.dll) : error LNK2005: "public: class std::locale::facet * __thiscall std::locale::facet::_Decref(void)"
    

    Martin Richter schrieb:

    Die CLR Einstellungen haben damit nichts zu tun. Die sollten eigentlich aus sein.

    Mit anderen Worten: MSVCP100D ist die Debug-Version der C++ runtime library
    und hat nichts mit CLI zu tun.

    Du wirst dich entscheiden müssen ob du C++ mit

    C Run-Time Libraries (CRT)
    http://msdn.microsoft.com/en-us/library/abx4dbyh(v=vs.100).aspx

    oder .NET basiertes CLI verwenden möchtest ->dann hier falsches Forum!



  • Da ich mit C++/CLI an der Stelle nicht weiter kam, habe ich es nun im Borland Builder gelöst. Dort hatte ich keine Probleme mit dem Einbinden der libs.


  • Mod

    Du wärest auch mit dem normalen VC Compiler weiter gekommen.
    Du musst nur darauf hören was man Dir sagt. Schalte C++/CLI aus.



  • Und wo/wie hätte ich das tun sollen?

    Du hast ja vorher nicht auf meine Rückfrage geantwortet...


  • Mod

    In den Projekteinstellungen. Gleich unter General auf der ersten Seite.
    Ein wenig Eigeninitiative und lesen der Doku schadet nicht 😉



  • Kann dir nicht ganz folgen. Ich habe doch aber ein CLI-Projekt (WindowsForms mit C++) erstellt...das kann ich dann doch nicht einfach ausschalten!?



  • Wenn Du es im Borladn Builder lösen kannst, dann brauchst Du kein C++/CLI...


Anmelden zum Antworten