Linkerprobleme mit Code::Blocks und GTKmm



  • Hallo,

    ich habe eine Frage zu GTKmm in Verbindung mit Code::Blocks:

    Ich habe mir das Tutorial zu GTK+ und GTKmm aus der FAQ durchgelesen und GTK+ und GTKmm installiert. Wenn ich unter Code::Blocks das Template für GTK+ Anwendungen benutze, kann ich normale GTK+ Anwendungen auch kompilieren + linken.

    Jetzt möchte ich aber GTKmm benutzen. Dazu habe ich mir unter Code::Blocks eine Konsolenanwendung erstellt (war das schon falsch?) und dann unter

    Project->Build options->Directories->Compiler
    

    alle Ordner für GTK+ und GTKmm hinzugefügt, so wie es im Tutorial beschrieben ist. Unter

    Project->Build options->Directories->Linker
    

    habe ich dann noch

    C:\GTK\lib
    

    hinzugefügt und schließlich unter

    Project->Build options->Linker
    

    alle zu linkenden Libraries ergänzt. Dabei gab es bei mir im Verzeichnis C:\GTK\lib die beiden Bibiotheken gdi32 und ws2_32 nicht. Deshalb habe ich unter den Linker-Directories auch noch C:\MingW\lib ergänzt und schließlich unter den zu linkenden Libraries

    libgdi32.a und libws2_32.a

    hinzugefügt, ich hoffe dass das nicht der Grund für die Fehler ist...

    Wenn ich jetzt nämlich folgenden Beispiel-Code kompilieren möchte, hagelt es immer Linkerfehler:

    #include <gtkmm.h>
    
    int main(int argc, char *argv[])
    {
        Gtk::Main kit(argc, argv);
        Gtk::Window window;
        Gtk::Main::run(window);
        return 0;
    }
    
    C:\Documents and Settings\Felix\My Documents\Projects\GTKTest\main.cpp:5: undefined reference to `Gtk::Main::Main(int&, char**&, bool)'
    C:\Documents and Settings\Felix\My Documents\Projects\GTKTest\main.cpp:6: undefined reference to `Gtk::Window::Window(Gtk::WindowType)'
    C:\Documents and Settings\Felix\My Documents\Projects\GTKTest\main.cpp:7: undefined reference to `Gtk::Main::run(Gtk::Window&)'
    C:\Documents and Settings\Felix\My Documents\Projects\GTKTest\main.cpp:8: undefined reference to `Gtk::Window::~Window()'
    C:\Documents and Settings\Felix\My Documents\Projects\GTKTest\main.cpp:8: undefined reference to `Gtk::Main::~Main()'
    C:\Documents and Settings\Felix\My Documents\Projects\GTKTest\main.cpp:8: undefined reference to `Gtk::Window::~Window()'
    C:\Documents and Settings\Felix\My Documents\Projects\GTKTest\main.cpp:8: undefined reference to `Gtk::Main::~Main()'
    :: === Build finished: 7 errors, 0 warnings ===
    

    Jetzt meine Frage: Woher kommen diese Linkerfehler? Habe ich beim eintragen der Bibliotheken irgendetwas falsch gemacht?

    Schonmal Danke im Voraus

    Felix

    P.S.: Screenshots meiner Code::Blocks Einstellungen gibt es hier:

    http://img228.imageshack.us/img228/6286/compilerdirectoriestj1.jpg
    http://img228.imageshack.us/img228/1426/linkerbibliothekenkk0.jpg
    http://img228.imageshack.us/img228/6559/linkerbibliothekenkj8.jpg



  • Ich bin gerade auf eine Newsgroup gestoßen, in der mein Problem bei jemand anders aufgetreten ist. Sein "Lösung", die ich allerdings nicht ganz nachvollziehen kann, da ich mich mit den Kommandozeilencompilern praktisch überhaupt nicht auskenne ist:

    under Windows the order of compiler and linker flags matters.
    So it is important to do give the LDFLAGS after the source files:
    $(GCC) $(CFLAGS) -o $(BIN) $(SRC) (LDFLAGS)andnot(LDFLAGS) and not (GCC) $(CFLAGS) $(LDFLAGS) -o $(BIN) $(SRC

    Link: http://mail.gnome.org/archives/gnomemm-list/2005-May/msg00009.html

    Wie kann ich das in Code::Blocks einstellen, bzw. was bedeutet das überhaupt? 😉

    Felix

    EDIT: Unter dieser Adresse hat noch jemand das gleiche Problem, bei ihm liegt es anscheinend an der Compiler-Version...:
    http://groups.google.de/group/be.comp.programming/browse_thread/thread/1b3509cb40751811/02a31b2336625648&rnum=1&hl=de#02a31b2336625648

    Ähnliches Problem auch noch einmal hier:

    http://209.85.135.104/search?q=cache:ZNieygBusz8J:www.c-plusplus.net/forum/viewtopic-var-t-is-150791-and-view-is-next.html+gtkmm+g%2B%2B+3.4.5&hl=de&gl=de&ct=clnk&cd=1

    Hat irgendwer irgendeine Idee?

    EDIT Final:

    SO, ich habe mein bescheuertes Problem jetzt selbst gelöst. Allderdings sollte die FA evtl. mal upgedatet werden. DIe Lösung ist wie folgt:

    Ich habe, wie in der FAQ stand

    gtkmm-2.4.lib
    gdkmm-2.4.lib
    atkmm-1.6.lib
    pangomm-1.4.lib
    glibmm-2.4.lib
    sigc-2.0.lib
    gdi32.lib
    libglademm-2.4.lib
    z.lib
    ws2_32.lib

    gegen meine Anwendung linken lassen. Nach (mehr oder weniger) intensiven Recherchen habe ich aber festgestelle, dass auf der Seite, auf der man die Installationsdatei für GTKmm herunterladen kann steht:

    Import libraries for mingw32 have the .dll.a extension. Import libraries for MSVC have the .lib extension.

    😡 😡 😮 😮 🙄 🙄

    Das war das einzige Problem, das ich hatte. Jetzt funktioniert alles... Das einzig Komische bleibt, dass die Bibliotheken von GTK+ anscheinend trotzdem .lib als Endung haben 😕

    Naja, vielleicht hat ja mal irgendwer irgendwann das gleiche Problem

    Felix :xmas1: :xmas2:



  • Phoemuex schrieb:

    Allderdings sollte die FA evtl. mal upgedatet werden. DIe Lösung ist wie folgt:

    Ich habe, wie in der FAQ stand

    gtkmm-2.4.lib
    gdkmm-2.4.lib
    atkmm-1.6.lib
    pangomm-1.4.lib
    glibmm-2.4.lib
    sigc-2.0.lib
    gdi32.lib
    libglademm-2.4.lib
    z.lib
    ws2_32.lib

    gegen meine Anwendung linken lassen. Nach (mehr oder weniger) intensiven Recherchen habe ich aber festgestelle, dass auf der Seite, auf der man die Installationsdatei für GTKmm herunterladen kann steht:

    Import libraries for mingw32 have the .dll.a extension. Import libraries for MSVC have the .lib extension.

    😡 😡 😮 😮 🙄 🙄

    Yo, in der FAQ wird auch nur beschrieben, wie man gtkmm mit dem Visual Studio zum Laufen bringt... Ich wollte schon lange mal was zu gtkmm + MinGW schreiben, aber bisher fehlte mir immer die Zeit.



  • Dafür das du keine Zeit hast postest du aber ziemlich viel hier im C++ Forum...



  • Rop schrieb:

    Dafür das du keine Zeit hast postest du aber ziemlich viel hier im C++ Forum...

    Jo, deshalb hab ich auch keine Zeit^^
    Abgesehen davon poste ich nicht sooo viel.


Anmelden zum Antworten