FLTK Linker Error



  • Habe nun FLTK nochmal kompiliert 🙂
    Habe Debug als Modus gewählt.
    Ja ich hatte das Hauptverzeichnis unter Include-Dateien global angegeben. Die anderen Pfade habe ich nun auch noch an den entsprechenden Stellen hinzugefügt.
    Die ws2_32.lib und die msimg32.lib sind doch im Microsoft Platform SDK enthalten? Zumindest finde ich sie bei mir dort. Die Pfade des SDKs habe ich global unter VC++ Verzeichnisse angegeben.
    Nachdem ich FLTK im Debug Mudos erfolgreich nur mit ein paar Warnungen erstellt habe, habe ich mein Hello World Prograsmm erneut kompiliert und erhielt lediglich die Fehlermeldung:

    LINK : fatal error LNK1104: Datei "fltk2.lib" kann nicht geöffnet werden.
    

    .
    Da bei mir nur die fltk2d.lib existiert (aufgrund des Debug Modus?), habe ich FLTK nochmal im Release Modus erstellt, was allerdings erneut zu der oben genannten Fehlermelung führte und mir bei meinem Hello World Programm wieder eine Flut von Linker Errors einbrachte ...
    Danke schonmal für deine Geduld mit mir 🙂



  • Die ws2_32.lib und die msimg32.lib sind doch im Microsoft Platform SDK enthalten? Zumindest finde ich sie bei mir dort.

    Ja, sind Libs von MS für Sockets und Grafik. Die braucht FLTK.

    Da bei mir nur die fltk2d.lib existiert (aufgrund des Debug Modus?)

    Die Libs mit dem d hinten dran, sind die Debug-Varianten.

    was allerdings erneut zu der oben genannten Fehlermelung führte

    Das er die fltk2.lib nicht gefunden hat? Dann hast du den Pfad nicht korrekt angegeben, oder die Datei existriert nicht. Die muß er natürlich finden! Notfalls nicht nur fltk2.lib angeben, sondern mit kompletten Pfad (C:\blabla\fltk2d.lib).

    Mehr kann ich dir auch nicht sagen, weil es einfach nicht mehr einzurichten gibt, wenn man die FLTK-Lib benutzen will. Voraussetzung muß natürlich sein, das die Entwicklungsumgebung unabhängig von FLTK korrekt funktioniert (z.B.PlatformSDK korrekt eingerichtet).

    Wenn fltk2.lib vorhanden ist, hat er sie zumindest ohne Errors gebaut, und das reicht auch.

    Evtl. solltest du einfach im offiziellen fltk-Forum nachfragen, ob es mit VC++2005 EE bekannte Probleme gibt (was ich bezweifel). Oder du versuchst einfach mal ein reines Win32-API-Helloworld-Progamm zu erstellen und zum Laufen zu bekommen, um zu sehen ob die Basis überhaupt bei dir funktioniert.

    Mehr kann ich jetzt leider per Ferndiagnose auch nicht machen.



  • Aber wieso benötigt er zum Erstellen der Bibliotheken bereits eine Bibliothek? Das ist für mich irgendwie unlogisch. Ich habe diese Fehlermeldung, das er die fltk.lib nicht finden kann zweimal bekommen. Das Erste Mal als ich FLTK in der Debug Variante erstellt hatte und dann mein Hello World Programm kompilieren wollte. Das zweite Mal war danach, als ich FLTK in der Release Variante erstellen wollte.
    Wieso braucht er der eine Bibliothek, die er erst noch erstellen soll?



  • Dann hast du mich falsch verstanden. Die Libs wie ws2_32.lib brauchst du für dein HelloWorld.

    Für das bauen von FLTK brauchst du nichts weiter machen als das *.dsw öffnen und die entsprechenden Projekte (z.B. fltk Projekt) bauen lassen. Optimalerweise die gesamte Projektmappe mit F7 komplett bauen lassen.

    So, und dann kannst du doch schon mal die Beispiele aus der Projektmappe ausprobieren (z.B. das demo Projekt starten) und schauen ob diese auch funktionieren. Und die funktionieren eigentlich ohne Beanstandung. Da sind ca. 20 Beispiel-Projekte drin, die man starten kann. Wenn die funktionieren, muß auch dein eigenes HelloWorld funktionieren.

    Für dein HelloWorld mußt du dann aber die Pfade usw. setzen, die drei Libs zuweisen und die passende Runtime wählen. Fertig!



  • Ich glaube du verstehst mich nicht. Also folgendes:
    FLTK Debug Modus => alles wird kompiliert keine Probleme
    FLTK Release Modus => beim Projekt Radio erhalte ich den Linker Error, dass die fltk2.lib nicht geöffnet werden kann.

    Hello World mit FLTK Debug => Linker Error: fltk2.lib kann nicht geöffnet werden
    Hello World mit FLTK Release => Mehrere Linker Errors

    Diese:

    fltk_test.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""int __cdecl fltk::run(void)" (?run@fltk@@YAHXZ)".
    fltk_test.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""class fltk::Symbol * fltk::UP_BOX" (?UP_BOX@fltk@@3QAVSymbol@1@A)".
    fltk_test.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""struct fltk::Font * fltk::HELVETICA_BOLD_ITALIC" (?HELVETICA_BOLD_ITALIC@fltk@@3QAUFont@1@A)".
    fltk_test.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: void __thiscall fltk::Window::show(int,char * *)" (?show@Window@fltk@@QAEXHPAPAD@Z)".
    fltk_test.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall fltk::Window::Window(int,int,char const *)" (??0Window@fltk@@QAE@HHPBD@Z)".
    fltk_test.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""class fltk::LabelType * fltk::SHADOW_LABEL" (?SHADOW_LABEL@fltk@@3QAVLabelType@1@A)".
    fltk_test.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: void __thiscall fltk::Widget::labelsize(float)" (?labelsize@Widget@fltk@@QAEXM@Z)".
    fltk_test.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: void __thiscall fltk::Widget::labeltype(class fltk::LabelType *)" (?labeltype@Widget@fltk@@QAEXPAVLabelType@2@@Z)".
    fltk_test.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: void __thiscall fltk::Widget::labelfont(struct fltk::Font *)" (?labelfont@Widget@fltk@@QAEXPAUFont@2@@Z)".
    fltk_test.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: void __thiscall fltk::Widget::box(class fltk::Symbol *)" (?box@Widget@fltk@@QAEXPAVSymbol@2@@Z)".
    fltk_test.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall fltk::Widget::Widget(int,int,int,int,char const *)" (??0Widget@fltk@@QAE@HHHHPBD@Z)".
    fltk_test.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""private: static class fltk::Group * fltk::Group::current_" (?current_@Group@fltk@@0PAV12@A)".
    

    Die hängen wahrscheinlich mit dem Fehler beim Komplieren von FLTK im Release Modus zusammen, oder?



  • Ich hoffe dieser Thread ist hier keine Verarschung? "Wie weit muß ich gehen, um ein Forumsmitglied zum Explodieren zu bringen?" 😉

    OK... nochmal:

    FLTK Debug Modus => alles wird kompiliert keine Probleme

    Gut, warum linkst du dann dein HelloWorld nicht gegen die fltk2d.lib? Damit du erstmal EIN Erfolgserlebnis hast. Dieser Build zeigt doch schon mal, das prinzipiell das Bauen der FLTK funktioniert. 👍

    FLTK Release Modus => beim Projekt Radio erhalte ich den Linker Error, dass die fltk2.lib nicht geöffnet werden kann.

    So, ist aber Projekt fltk gebaut wurden? Das Projekt Radio könnte einen Bug haben, nicht schlimm!!! Da es keine Lib ist sondern nur ein Bsp.-Programm. Auch ist FLTK 2.x kein Stable-Release sondern ein wöchentlicher Snapshot, der auch Fehler haben kann.

    Hello World mit FLTK Debug => Linker Error: fltk2.lib kann nicht geöffnet werden

    Versuch doch mal fltk2d.lib, da Punkt 1 doch 100% funktioniert hat. Wenn dein HelloWorld auch dieses nicht findet, hast du ganz einfach vergessen den Lib-Pfad korrekt anzugeben!

    Hello World mit FLTK Release => Mehrere Linker Errors

    komisch! hier findet er die fltk2.lib obwohl sie unter 3. nicht gefunden wurde. Was aber vielleicht nicht verwunderlich ist, weil vielleicht Punkt2 die Lib doch nicht gebaut hat.

    Also, mehr kann ich auch nicht mehr analysieren. Das Problem kann auch vor dem Rechner sitzen. Ich weiß es nicht. 😉 Hast du schon ein eigenes Win32-Fensterprogramm erstellt? (ohne FLTK!) Ansonst mußt du wirklich im offiziellen FLTK-Forum fragen. Ich kann dir absolut nicht weiter helfen.



  • Nein das ist keien Verarsche. Tut mir leid, dass ich deine Geduld hier so strapaziere.
    Wie sage ich dem Programm denn, welche Libary er nehmen soll? Ich gebe ihm doch nur immer das Verzeichnis zu den Libaries.
    Muss ich fltk2.lib unter Projekteigenschaften -> Linker -> Befehlszeile -> zusätzliche Optionen eingeben?



  • Ja, natürlich! Du mußt die Libs gegen die gelinkt werden soll, irgendwo angeben. Es gibt insgesamt vier verschiedene Stellen wo man das machen kann (im Sourcecode über #pragma, im Projektbaum hinzufügen und an zwei Stellen in den Linker-Settings). Deine genannte Stelle ist eine davon. Trag doch einfach mal die drei nötigen Libs ein, über die wir hier die ganze Zeit schreiben.



  • Ich habe diese drei Libs jetzt in die Befehlszeile eingegeben (mit vollständiger Pfad), aber dann bekomme folgende Warnung:

    LINK : warning LNK4098: Standardbibliothek "LIBCMTD" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
    

    + plus ungefähr 100 Linker Errors. Wenn ich dieses /NODEFAULTLIB aktiviere erhalt ich 300 ...
    Gibt es irgendwo mal eine Step-by-Step Anleitung wie und wo ich Bibliotheken bei Visual C++ einbinden muss? Weil bei anderen GUIs stoße ich auf die selben Fehler mit irgendwelchen Linker Errors 😞



  • Wie schon in vorherigen Beitraägen gesagt, mußt du die Runtime umstellen. Diese dürfte standardmäßig auf Multithreaded-Debug-DLL eingestellt sein. Stell diese mal auf eine Nicht-DLL-Variante um, also Multithreaded-Debug.

    Projekteigenschaften->C/C++->Codeerstellung->Laufzeitbibliothek

    Dann müsste alles perfekt sein.

    Wie man mit dem VC++ umgeht, steht in der Online-MSDN:
    http://msdn2.microsoft.com/en-us/library/60k1461a.aspx
    Und einen Hilfe-Button gibts eigentlich auch noch im Projekt-Dialog. Du müsstest evtl. die MSDN downloaden und einrichten (keine Ahnung wie das unter Express geht).


Anmelden zum Antworten