GTK unter Win32 mit C++ in Eclipse



  • Hallo,
    ich will nun ein GUI Projekt starten welches ich mit GTK umsetzen will und unter Win32 entwickeln will (lauffähig sollte es jedoch auch unter Linux sein, daher GTK) Jetzt wollte ich fragen was alles benötigt wird an Vorraussetzungen und inwiefern die Entwicklung mit Eclipse möglich ist.

    Hat dort evtl einer ein HowTo zur hand welche Programme ich benötige wie ich mein Eclipse einrichten müsste (CDT & MiniGw (GCC Compiler) vorhanden).

    Besten dank im vorraus.

    Gruß jensa



  • Warum sollte man das so machen, mal ganz doof gefragt?
    Ein programm das nur unter Linux laufen soll, würde ich auch nur dort entwickeln.
    Dann, warum GTK? Alternativen wären auch wxWidgets oder QT. Aber das ist nur eine Randfrage.

    Um die Frage zu beantworten:
    Du brauchst halt einen Compiler und GTK. Die libs und Header korrekt einbinden und verwenden. Das sollte reichen. Du solltest halt keine OS-abhängigen Dinge verwenden. Das kippt die Portabilität.
    Wenn du deinen Compiler unter C:\MinGW installiert hast, würde ich C:\MinGW\bin zum Pfad in Windows hinzufügen, dann findet eclipse den Compiler, Linker etc selbst.
    rya.



  • Hallo,
    GTK wollte ich verwenden da es mir empfohlen wurde.
    Worin liegen denn vorteile in Qt & wxWidgets gegenüber GTK?

    Den Compiler habe ich (MiniGW)

    aber speziell habe ich das Problem das ich das GTK nicht gescheit eingebunden bekomme.

    Das Programm soll zudem nicht nur unter Linux laufen, sondern primär unter Windows jedoch auch ausführbar unter linux sein, daher halt die Entwicklung unter Windows (Arbeitsrechner)

    gruß jensa



  • Es kommt darauf an, was man machen möchte. Wenn du als bsp. als Desktop NUR KDE verwendest unter Linux, würde ich schon QT verwenden, weil dann sparst dir die Installation von GTK. QT bietet auch unter Windows eine OpenSource-Lizenz, wenns kommerziell ist, musst zahlen. Wenn das Programm auch andere verteilt wird, isses egal.

    Ich würde aber am Ende zu wxWidgets tendieren, weil es den nativen Look and Feel der jeweiligen Platform bietet und mit mehr als 10 jahren Entwicklungszeit die erfahrenste der Möglichkeiten darstellt. Die Lernkurve finde ich auch sehr gut bei wxWidgets. Aber das ist totale Geschmackssache :).
    Ausserdem kann wxWidgets auch kommerziell kostenlos verwendet werden.

    Was für Probleme hast du denn mit der Einbindung? Bitte etwas spezifizieren was genau dein Problem ist :).
    rya.
    Nico



  • Wenn du eh C++ machst, warum dann GTK+? Warum nicht gtkmm??? Das wäre doch nur ein logischer Schritt.

    Ob Qt, wxWidgets oder gtkmm ist dann nur noch Geschmackssache, oder halt von der Lizenz abhängig. Qt hat z.B. die GPL, was nicht jedem Projekt Sinn macht.



  • Hallo,
    nunja also ich bräuchte als lizenz halt eine die für Kommerzielle Zwecke genutzt werden darf (nur benutzt / kein verkauf)

    GTKmm ist mir bereits auch schon beim lesen aufgefallen, frage mich jedoch da mir das noch nicht klar wurde worin die deutlichen unterschiede zwischen GTKmm & GTK+ sind.

    GTKmm ist meines Verständnisses nach eigtl eine Art Erweiterung / neue Version von GTK+ speziell für C++?

    Zu dem Problem mit dem Einbinden:

    ....
    C:/entwicklungsumgebung/gtk/include/gtkmm-2.4/gtkmm/viewport.h: In member function `GtkViewport* Gtk::Viewport::gobj()':
    C:/entwicklungsumgebung/gtk/include/gtkmm-2.4/gtkmm/viewport.h:85: error: `gobject_' was not declared in this scope
    C:/entwicklungsumgebung/gtk/include/gtkmm-2.4/gtkmm/viewport.h:85: warning: unused variable 'gobject_'
    C:/entwicklungsumgebung/gtk/include/gtkmm-2.4/gtkmm/viewport.h: In member function `const GtkViewport* Gtk::Viewport::gobj() const':
    C:/entwicklungsumgebung/gtk/include/gtkmm-2.4/gtkmm/viewport.h:88: error: `gobject_' was not declared in this scope
    C:/entwicklungsumgebung/gtk/include/gtkmm-2.4/gtkmm/viewport.h:88: warning: unused variable 'gobject_'
    Build error occurred, build is stopped
    Time consumed: 42877  ms.
    

    meine Cpp-Testdatei ist:

    #include <gtkmm.h>
    
    int main(int argc, char *argv[])
    {
        Gtk::Main main_obj(argc, argv);
        Gtk::Window window_obj;
        main_obj.run(window_obj);
        return 0;
    }
    

    als includepfad habe ich:
    C:\entwicklungsumgebung\gtk\include\gtkmm-2.4
    als auch einige MiniGW pfade (waren bereits vorhanden)
    darin ist dann auch direkt die gtkmm.h & ein ordner gtkmm

    Beim Compilieren braucht er wie oben zitiert ca 42000 ms da er überall in den includes des gtkmm iso fehler findet.

    gruß jensa



  • [quote="jensa"]Hallo,
    nunja also ich bräuchte als lizenz halt eine die für Kommerzielle Zwecke genutzt werden darf (nur benutzt / kein verkauf)

    GTKmm ist mir bereits auch schon beim lesen aufgefallen, frage mich jedoch da mir das noch nicht klar wurde worin die deutlichen unterschiede zwischen GTKmm & GTK+ sind.

    GTKmm ist meines Verständnisses nach eigtl eine Art Erweiterung / neue Version von GTK+ speziell für C++?
    [/qoute]
    Na, was gtkmm ist, steht ja auf der gtkmm-Webseite. Es ist keine neue Versio oder Erweiterung zu GTK+, sondern ein C++-Wrapper. Was heißt das? GTK+ ist eine C-Library und wer C++ programmiert, tut das für gewöhnlich, weil er kein C benutzen will. Sonst kann er auch gleich C programmieren, oder?
    Also hat jemand gtkmm entwickelt, welches C++ gerecht wird. Aber unter der Haube läuft GTK+.

    jensa schrieb:

    Zu dem Problem mit dem Einbinden:
    ...

    Na, gtkmm ist schon komplexer. Da reicht es glaube ich nicht, ein Verzeichnis anzugeben. Kann es sein, das du überhaupt nicht in die Doku geschaut hast? Das solltest du:
    http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/chapter-installation.html



  • Hallo,
    ich hatte MiniGW inkl GTKmm / GTK+ nach der Anleitung von: http://synfig.org/Mingw_installation#MinGW installiert.

    habe danach mittels

    pkg-config --modversion
    --cflags --libs gtkmm-2.4

    getestet ob alles eingebunden ist und wurde ohne fehler ausgefürht

    Ausgabe war:

    2.10.8
    -mms-bitfields
    -IC:/GTK/include/gtkmm-K/include/glibmm-2.4
    -IC:/GTK/lib/glib
    -IC:/GTK/lib/gdkmm-2.4/include
    -IC:/GTmm-1.6 -IC:/GTK/include/gtk-2.0
    -IC:/G2.0/include
    -IC:/GTK/include/glib-2.0/gtk-2.0/include
    -IC:/GTK/include/cairK/include/cairo
    -IC:/GTK/include/freet-1.0 -Wl,-luuid
    -LC:/GTK/lib -lgtkmm-0 -lpangomm-1.4 -lcairomm-1.0 -lglibmm
    shell32 -lole32 -latk-1.0 -lgdk_pixbuf
    .0 -lpangowin32-1.0 -lgdi32 -lfreetype
    t-2.0 -lgmodule-2.0 -lglib-2.0 -lintl

    jedoch scheint mein Eclipse nicht die korrekten Abhängigkeiten zu finden, da der Beispielsweise eine gtkmm.h datei nicht auflösen kann.

    gruß jensa



  • alternative frage,

    wie sähe der korrekte aufruf des gcc - compilers auf der console aus um ein gtkmm projekt zu kompilieren?

    gruß jensa



  • Ich will ja nichts sagen... aber du wirst so nie im Leben bzw. Programmieren weiter kommen, wenn du jeden Pups nachfragst. Ich hatte dir ja bereits geschrieben, das du alles in der gtkmm-Doku findest! Warum schaust du da nicht rein???
    Aber ich kann dir gerne nochmal die URL posten:
    http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/sec-windows-installation.html
    Da werden insgesamt Compiler-Aufrufe für drei Tools genannt.



  • hallo,
    bin ja auch an dem tutorial entlang gegangen problem jedoch das dort mit dev-c++ entwickelt wird ich aber mit eclipse cdt entwickeln will & muss.

    fehler wenn man die libs eingebunden hat wie in dem tutorial steht

    **** Rebuild of configuration Debug for project guitest ****

    **** Internal Builder is used for build ****
    g++ -IC:\GTK\include\gtk-2.0 -IC:\GTK\include\gtkmm-2.4 -O0 -g3 -Wall -IC:/GTK/include/gtkmm-2.4 -IC:/GTK/lib/gtkmm-2.4/include -IC:/GTK/include/glibmm-2.4 -IC:/GTK/lib/glibmm-2.4/include -IC:/GTK/include/gdkmm-2.4 -IC:/GTK/lib/gdkmm-2.4/include -IC:/GTK/include/pangomm-1.4 -IC:/GTK/include/atkmm-1.6 -IC:/GTK/include/gtk-2.0 -IC:/GTK/include/sigc++-2.0 -IC:/GTK/lib/sigc++-2.0/include -IC:/GTK/include/glib-2.0 -IC:/GTK/lib/glib-2.0/include -IC:/GTK/lib/gtk-2.0/include -IC:/GTK/include/cairomm-1.0 -IC:/GTK/include/pango-1.0 -IC:/GTK/include/cairo -IC:/GTK/include/freetype2 -IC:/GTK/include -IC:/GTK/include/atk-1.0 -osrc\gtktest.o ..\src\gtktest.cpp
    c:\DOKUME1\jasshaue\LOKALE1\Temp/ccmRohYm.o: In function main': C:/Dokumente und Einstellungen/jasshaue/Eigene Dateien/workspace/cpp/guitest/Debug/../src/gtktest.cpp:5: undefined reference toGtk::Main::Main(int&, char**&, bool)'
    C:/Dokumente und Einstellungen/jasshaue/Eigene Dateien/workspace/cpp/guitest/Debug/../src/gtktest.cpp:6: undefined reference to Gtk::Window::Window(Gtk::WindowType)' C:/Dokumente und Einstellungen/jasshaue/Eigene Dateien/workspace/cpp/guitest/Debug/../src/gtktest.cpp:7: undefined reference toGtk::Main::run(Gtk::Window&)'
    C:/Dokumente und Einstellungen/jasshaue/Eigene Dateien/workspace/cpp/guitest/Debug/../src/gtktest.cpp:8: undefined reference to Gtk::Window::~Window()' C:/Dokumente und Einstellungen/jasshaue/Eigene Dateien/workspace/cpp/guitest/Debug/../src/gtktest.cpp:8: undefined reference toGtk::Main::~Main()'
    C:/Dokumente und Einstellungen/jasshaue/Eigene Dateien/workspace/cpp/guitest/Debug/../src/gtktest.cpp:8: undefined reference to Gtk::Window::~Window()' C:/Dokumente und Einstellungen/jasshaue/Eigene Dateien/workspace/cpp/guitest/Debug/../src/gtktest.cpp:8: undefined reference toGtk::Main::~Main()'
    c:\DOKUME1\jasshaue\LOKALE1\Temp/ccmRohYm.o: In function Z41\_\_static\_initialization\_and\_destruction_0ii': C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:37: undefined reference toGlib::ustring::ustring(char const*)'
    C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:38: undefined reference to Glib::ustring::ustring(char const*)' C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:39: undefined reference toGlib::ustring::ustring(char const*)'
    C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:40: undefined reference to Glib::ustring::ustring(char const*)' C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:41: undefined reference toGlib::ustring::ustring(char const*)'
    c:\DOKUME1\jasshaue\LOKALE1\Temp/ccmRohYm.o:C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:42: more undefined references to Glib::ustring::ustring(char const*)' follow c:\\DOKUME~1\\jasshaue\\LOKALE~1\\Temp/ccmRohYm.o: In functionZ41__static_initialization_and_destruction_0ii':
    C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:43: undefined reference to Glib::ustring::~ustring()' C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:42: undefined reference toGlib::ustring::~ustring()'
    C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:41: undefined reference to Glib::ustring::~ustring()' C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:40: undefined reference toGlib::ustring::~ustring()'
    C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:39: undefined reference to Glib::ustring::~ustring()' c:\\DOKUME~1\\jasshaue\\LOKALE~1\\Temp/ccmRohYm.o:C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:38: more undefined references toGlib::ustring::~ustring()' follow
    collect2: ld returned 1 exit status
    Build error occurred, build is stopped
    Time consumed: 4469 ms.

    der quellcode dazu:

    #include <gtkmm.h>
    
    int main(int argc, char *argv[])
    {
        Gtk::Main main_obj(argc, argv);
        Gtk::Window window_obj;
        main_obj.run(window_obj);
        return 0;
    }
    


  • Natürlich kann die Doku nicht jede IDE dieser Welt behandeln. Wäre doch etwas zu viel verlangt, vorallem weil die gtkmm-Jungs auch nicht jede IDE testen. Und Eclipse ist nunmal nicht gerade eine prominente C++-IDE, sondern eher ein Nischenprodukt, in der C++-Welt.

    Wer macht denn die Vorgabe für dich? Normalerweise ist VisualC++ _die_ IDE unter Windows. Zumindest wenn es darum geht, den Leuten eine Anleitung zu geben.

    Übrigens, du hast NICHT die Doku gelesen. Sorry, aber ich überlege gerade, ob ich dir die Stelle zeigen soll, wo beschrieben wird, wie du das Ding kompiliert bekommst... denn es steht eindeutig dabei, wie man es auch ohne DevC++ aber mit Mingw kompiliert. Bitte lesen! Ich werde dir die genaue Stelle in der Doku nicht nennen. Weil danach wird deine nächste Frage kommen, die bestimmt auch in der Doku beantwortet wird. 🙄



  • hallo,
    du spielst sicherlich auf
    http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/sec-dev-cpp-command-line-tools.html

    an,

    habe das auch gemacht da dies ja ebenfalls in der anleitung welche ich genommen hatte so beschrieben war.

    wenn ich den test durchführe kommt jedoch:

    $ pkg-config --version
    0.20

    $ pkg-config --modversion --cflags --libs gtkmm-2.4
    Package gtkmm-2.4 was not found in the pkg-config search path.
    Perhaps you should add the directory containing `gtkmm-2.4.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'gtkmm-2.4' found

    und die PKG_CONFIG_PATH ist auch korrekt
    export PKG_CONFIG_PATH="/C/GTK/lib/pkgconfig:C:\\GTK\\lib\\pkgconfig;"
    war die ausgabe dafür.

    eine gtkmm-2.4.pc befindet sich auch im Verzeichnis C:\GTK\lib\pkgconfig

    von dato habe die anleitung schon berücksichtig & nachgeschlagen.

    aber leider klappt es nicht.

    wohin müsste ich die variable zeigen lassen sie muss ja auf das / die verzeichnise weisen die *.pc dateien enthalten.



  • hab jetzt mal gute alte handarbeit angewendet und nur mingw & msys mittels installer installiert und den rest händisch jetzt klappt es zumindest schonmal via mingw c++ dateien mit gtk+ inhalten zu compilieren.
    hoffe das ich es bald auch mal in eclipse zum laufen bekomme.



  • Viel Erfolg! 👍



  • Hallo,

    leider musste ich alles neu installieren aufgrund der Anforderung das CygWin benutzt werden muss aufgrund noch kommender Anforderungen.

    Jetzt habe ich das Problem beim Compilen einer Simplen GTK C++ Hello World

    /*
     * hello.cpp
     *
     *  Created on: 01.10.2008
     *      Author: jensa
     */
    #include <gtk/gtk.h>
    
    int main(int argc, char **argv)
    {
    
    	GtkWidget *fenster;
    
    	gtk_init(&argc, &argv);
    
     fenster = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    
     gtk_signal_connect(GTK_OBJECT(fenster), "destroy",
                        GTK_SIGNAL_FUNC(gtk_main_quit),NULL);
    
     gtk_window_set_title(GTK_WINDOW(fenster), "Der Fenstertitel");
    
     gtk_window_set_default_size(GTK_WINDOW(fenster), 400, 200);
    
     gtk_window_set_position(GTK_WINDOW(fenster),GTK_WIN_POS_CENTER);
    
     gtk_widget_show(fenster);
    
     gtk_main();
    
     return 0;
    }
    

    das der Output folgender ist:

    **** Build of configuration Debug for project hello ****

    make all
    Building file: ../hello.cpp
    Invoking: Cygwin C++ Compiler
    g++ -I"C:\GTK\include\gtk-2.0" -O0 -g3 -Wall -mms-bitfields -mno-cygwin -IC:/GTK/include/gtk-2.0 -IC:/GTK/lib/gtk-2.0/include -IC:/GTK/include/atk-1.0 -IC:/GTK/include/cairo -IC:/GTK/include/pango-1.0 -IC:/GTK/include/glib-2.0 -IC:/GTK/lib/glib-2.0/include -IC:/GTK/include/freetype2 -IC:/GTK/include -MMD -MP -MF"hello.d" -MT"hello.d" -o "hello.o" "../hello.cpp"
    /cygdrive/c/DOKUME1/jasshaue/LOKALE1/Temp/ccdin8Vt.o: In function main': /cygdrive/c/workspace/cpp/hello/Debug/../hello.cpp:14: undefined reference to_gtk_init_abi_check'
    /cygdrive/c/workspace/cpp/hello/Debug/../hello.cpp:16: undefined reference to \_gtk\_window_new' /cygdrive/c/workspace/cpp/hello/Debug/../hello.cpp:18: undefined reference to_gtk_object_get_type'
    /cygdrive/c/workspace/cpp/hello/Debug/../hello.cpp:18: undefined reference to \_g\_type\_check\_instance_cast' /cygdrive/c/workspace/cpp/hello/Debug/../hello.cpp:18: undefined reference to_gtk_main_quit'
    /cygdrive/c/workspace/cpp/hello/Debug/../hello.cpp:18: undefined reference to \_gtk\_signal\_connect\_full' /cygdrive/c/workspace/cpp/hello/Debug/../hello.cpp:21: undefined reference to_gtk_window_get_type'
    /cygdrive/c/workspace/cpp/hello/Debug/../hello.cpp:21: undefined reference to \_g\_type\_check\_instance_cast' /cygdrive/c/workspace/cpp/hello/Debug/../hello.cpp:21: undefined reference to_gtk_window_set_title'
    /cygdrive/c/workspace/cpp/hello/Debug/../hello.cpp:23: undefined reference to \_gtk\_window\_get\_type' /cygdrive/c/workspace/cpp/hello/Debug/../hello.cpp:23: undefined reference to_g_type_check_instance_cast'
    /cygdrive/c/workspace/cpp/hello/Debug/../hello.cpp:23: undefined reference to \_gtk\_window\_set\_default_size' /cygdrive/c/workspace/cpp/hello/Debug/../hello.cpp:25: undefined reference to_gtk_window_get_type'
    /cygdrive/c/workspace/cpp/hello/Debug/../hello.cpp:25: undefined reference to \_g\_type\_check\_instance_cast' /cygdrive/c/workspace/cpp/hello/Debug/../hello.cpp:25: undefined reference to_gtk_window_set_position'
    /cygdrive/c/workspace/cpp/hello/Debug/../hello.cpp:27: undefined reference to \_gtk\_widget_show' /cygdrive/c/workspace/cpp/hello/Debug/../hello.cpp:29: undefined reference to_gtk_main'
    collect2: ld returned 1 exit status
    make: *** [hello.o] Error 1

    Es scheint ja vom compiler her keine Probleme zu geben sondern scheinbar Probleme beim Linken,
    aber leider weiß ich nicht mehr weiter was anders gelinkt werden müsste.

    gruß


Anmelden zum Antworten