gtkmm Problem



  • Hi all,

    ich habe GTK+ und gtkmm installiert.

    Nun will ich in Dev-C++ ein einfaches Projekt Compilieren, aber er findet die gtkmm.h nicht.

    #include <gtkmm.h> müsste doch funktionieren, oder?

    MfG



  • ok, ich habe nun diese Schritte http://www.c-plusplus.net/forum/viewtopic-var-t-is-165460.html

    befolgt. Aber es geht immer noch nicht. 502 fehler. Ich bin ratlos.



  • kingfinn schrieb:

    Ich bin ratlos.

    Wir sind auch ratlos, wenn du uns nicht verräts, welche Fehler auftreten.

    Ach ja: Schmeiß die IDE weg und nimm was halbwegs modernes (die letzte Version von Dev-C++ ist über 4 Jahre alt).



  • Ich schätze mal, du hast die Include-Pfade und die Binary-Libs nicht in deiner IDE angegeben. Weil alles andere ziemlich mysteriös wäre. 😃

    Aber auf eine andere (moderne) IDE würde ich trotzdem umsteigen:
    http://www.kharchi.eu/wiki/doku.php?id=cpp:tools#entwicklungsumgebungen

    Da du Windows benutzt, wäre eine von diesen zu empfehlen:
    Code Blocks, Codelite oder VisualC++ Express Edition.



  • Unter Linux muss ich folgendes einbinden:

    #include <gtkmm-2.4/gtkmm.h>
    


  • m_power schrieb:

    Unter Linux muss ich folgendes einbinden:

    #include <gtkmm-2.4/gtkmm.h>
    

    Das ist aber falsch, weil das "nicht wartbar" ist! Du hast den Include-Pfad eine Ebene zu hoch angesetzt.



  • Was dann?
    Umlinken?

    ln -s /usr/include/gtkmm-2.4/gtkmm/ /usr/include/gtkmm
    


  • Kenne mich mit Linux-Shell nicht aus (glaube auch nicht das du das Links umbiegen mußt). Aber du müsstest ja irgendwo sowas stehen haben (z.B. in deinem Build-Script oder IDE), um den Pfad deinem Compiler bekannt zu machen:

    INCLUDE=/usr/include/
    

    Deshalb mußt du auch die gtkmm-2.4 mit angeben:

    #include <gtkmm-2.4/gtkmm.h>
    

    Aber eigentlich müsstest du das so konfigurieren:

    INCLUDE=/usr/include/gtkmm-2.4/
    

    Weil dann sucht der Compiler in dem Verzeichnis nach den Headern, was dir sowas ermöglichen sollte:

    #include <gtkmm.h>
    

    Das ermöglicht dir später mal einfacher auf eine neue gtkmm-Version umzusteigen, ohne deinen C++-Sourcecode ändern zu müssen. Dazu würdest du später nur den Include-Pfad anpassen müssen:

    INCLUDE=/usr/include/gtkmm-2.5/
    

    Eine Stelle ändern ist einfacher als viele ändern zu müssen. 🙂



  • Super,
    Danke für diese Antwort!



  • UPDATE: Ich habe mir nun Netbeans für mein Ubuntu besorgt. Welche Include Verzeichnisse muss ich angeben?



  • Um herauszufinden was du an Includeverzeichnissen angeben musst, tipp einfach pkg-config gtkmm-2.4 --cflags ein:

    gpc@desktop:~$ pkg-config gtkmm-2.4 --cflags
    -D_REENTRANT -I/usr/include/gtkmm-2.4 -I/usr/lib/gtkmm-2.4/include -I/usr/include/glibmm-2.4 -I/usr/lib/glibmm-2.4/include -I/usr/include/giomm-2.4 -I/usr/lib/giomm-2.4/include -I/usr/include/gdkmm-2.4 -I/usr/lib/gdkmm-2.4/include -I/usr/include/pangomm-1.4 -I/usr/include/atkmm-1.6 -I/usr/include/gtk-2.0 -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/lib/gtk-2.0/include -I/usr/include/cairomm-1.0 -I/usr/include/pango-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12 -I/usr/include/atk-1.0

    Und um herauszufinden gegen was du linken musst, tipp pkg-config gtkmm-2.4 --libs ein:

    gpc@desktop:~$ pkg-config gtkmm-2.4 --libs
    -lgtkmm-2.4 -lgiomm-2.4 -lgdkmm-2.4 -latkmm-1.6 -lgtk-x11-2.0 -lpangomm-1.4 -lcairomm-1.0 -lglibmm-2.4 -lsigc-2.0 -lgdk-x11-2.0 -latk-1.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lgio-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0



  • thanx ! gibt es nun auch noch eine methode, diese automatisiert hinzuzufügen?



  • Ich weiß jetzt nicht, inwiefern Netbeans das auflöst, aber eigentlich müsste es reichen:

    `pkg-config gtkmm-2.4 --cflags`
    

    (mit den ``` ) zu den Compiler-Flags und:

    `pkg-config gtkmm-2.4 --libs`
    

    (mit den ``` ) zu den Linker-Flags zu schreiben. Funktioniert jedenfalls bei Eclipse, da er den Compiler-Befehl und die Flags scheinbar direkt an die Shell weitergibt und diese den Befehl auflöst.


Anmelden zum Antworten