AlgLib unter MSVC++ 2008 Express



  • Ich habe hier jetzt in MSVC++ 2008 Express einen Kompiler-Fehler, den ich nicht so richtig nachvollziehen kann.

    ------ Erstellen gestartet: Projekt: test_alglib, Konfiguration: Debug Win32 ------
    Kompilieren...
    main.cpp
    Verknüpfen...
    msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?basic_string@DU?basic\_string@DU?char_traits@D@std@@V?allocator@D@2@@std@@QAE@XZ)istbereitsinlibalglib.lib(minlm.obj)definiert.msvcprtd.lib(MSVCP90D.dll):errorLNK2005:"public:staticunsignedint__cdeclstd::char_traits<char>::length(charconst)"(?length@?allocator@D@2@@std@@QAE@XZ) ist bereits in libalglib.lib(minlm.obj) definiert. msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: static unsigned int \_\_cdecl std::char\_traits<char>::length(char const *)" (?length@?char_traits@D@std@@SAIPBD@Z) ist bereits in libalglib.lib(minlm.obj) definiert.
    LINK : warning LNK4098: Standardbibliothek "LIBCMT" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
    C:\Dokumente und Einstellungen\User\Eigene Dateien\C++\MSVC++\test_alglib\Debug\test_alglib.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.
    Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\User\Eigene Dateien\C++\MSVC++\test_alglib\Debug\BuildLog.htm" gespeichert.
    test_alglib - 3 Fehler, 1 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    😞
    Die AlgLib habe ich für MinGW ( libalglib.a ) und MSVC ( libalglib.lib ) erstellt. Bei MinGW gibt es keinerlei Probleme. MSVC kompiliert aber nur fehlerfrei, wenn bei der Code-Erzeugung dynamisches Linken deaktiviert ist. Ungünstigerweise muss ich den Algorithmus aber in einem Projekt verwenden, das auf andere DLLs angewiesen ist. Wie schaffe ich das Problem am besten aus der Welt?

    Vielen Dank im Voraus!



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Scheinbar besteht ein Konflikt zwischen meiner selbstkompilierten, oberflächlich fehlerfreien Version der AlgLib 2.3 für C++ und den Standardeinstellungen von MSVC 2008 Express Edition. Siehe...
    MSDN Linker Warning LNK4098 und
    MSDN Linker Error LNK2005

    Die Warnung LNK4098 tritt auf, sobald ich die minlm.h aus der AlgLib zusammen mit iostream einbinde. Möglicherweise klappt das auch mit anderen Bibliotheken. Der Fehler LNK2005 tritt auf, sobald die Optimierungsroutine in Verbindung mit z.b. cout oder cin im Quelltext steht. Das Problem bleibt unbemerkt, solange man mit #include <stdio.h> bzw. #include <cstdio> arbeitet, wie es in den Beispielen zur AlgLib der Fall ist. :p



  • Nachdem ich mir mein armes kleines Gehirn jetzt eine ganze Weile verknotet habe, fiel es mir jetzt wie Schuppen von den Haaren... 🤡

    Gutgläubig, wie ich bin, habe ich zum erstellen von AlgLib das mitgelieferte Batch-Skript verwendet. Wie obiger Link zur Fehlerbeschreibung LNK4098 offenbart (wenn man den Text nur lange genug verständnislos anstarrt), handelt es sich um ein Problem mit der Run-Time Library. Wenn ich das also richtig kombiniere, will die AlgLib dann unter Standardeinstellungen auf eine andere Laufzeitbibliothek zugreifen als der Rest des Programms, was nicht funktioniert. :p

    Wenn man das Batch-Skript ändert, und zwar in der Zeile, in der der C++ Compiler ("cl") aufgerufen wird, die gewünschte Run-Time Library deklariert (in meinem Fall musste /MD eingefügt werden) klappt alles wie es soll. 😃


Anmelden zum Antworten