GTK unter Win32 mit C++ in Eclipse
-
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 gtkmmBeim 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.4getestet 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 -lintljedoch 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 functionmain': C:/Dokumente und Einstellungen/jasshaue/Eigene Dateien/workspace/cpp/guitest/Debug/../src/gtktest.cpp:5: undefined reference to
Gtk::Main::Main(int&, char**&, bool)'
C:/Dokumente und Einstellungen/jasshaue/Eigene Dateien/workspace/cpp/guitest/Debug/../src/gtktest.cpp:6: undefined reference toGtk::Window::Window(Gtk::WindowType)' C:/Dokumente und Einstellungen/jasshaue/Eigene Dateien/workspace/cpp/guitest/Debug/../src/gtktest.cpp:7: undefined reference to
Gtk::Main::run(Gtk::Window&)'
C:/Dokumente und Einstellungen/jasshaue/Eigene Dateien/workspace/cpp/guitest/Debug/../src/gtktest.cpp:8: undefined reference toGtk::Window::~Window()' C:/Dokumente und Einstellungen/jasshaue/Eigene Dateien/workspace/cpp/guitest/Debug/../src/gtktest.cpp:8: undefined reference to
Gtk::Main::~Main()'
C:/Dokumente und Einstellungen/jasshaue/Eigene Dateien/workspace/cpp/guitest/Debug/../src/gtktest.cpp:8: undefined reference toGtk::Window::~Window()' C:/Dokumente und Einstellungen/jasshaue/Eigene Dateien/workspace/cpp/guitest/Debug/../src/gtktest.cpp:8: undefined reference to
Gtk::Main::~Main()'
c:\DOKUME1\jasshaue\LOKALE1\Temp/ccmRohYm.o: In functionZ41\_\_static\_initialization\_and\_destruction_0ii': C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:37: undefined reference to
Glib::ustring::ustring(char const*)'
C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:38: undefined reference toGlib::ustring::ustring(char const*)' C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:39: undefined reference to
Glib::ustring::ustring(char const*)'
C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:40: undefined reference toGlib::ustring::ustring(char const*)' C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:41: undefined reference to
Glib::ustring::ustring(char const*)'
c:\DOKUME1\jasshaue\LOKALE1\Temp/ccmRohYm.o:C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:42: more undefined references toGlib::ustring::ustring(char const*)' follow c:\\DOKUME~1\\jasshaue\\LOKALE~1\\Temp/ccmRohYm.o: In function
Z41__static_initialization_and_destruction_0ii':
C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:43: undefined reference toGlib::ustring::~ustring()' C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:42: undefined reference to
Glib::ustring::~ustring()'
C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:41: undefined reference toGlib::ustring::~ustring()' C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:40: undefined reference to
Glib::ustring::~ustring()'
C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:39: undefined reference toGlib::ustring::~ustring()' c:\\DOKUME~1\\jasshaue\\LOKALE~1\\Temp/ccmRohYm.o:C:/GTK/include/gtkmm-2.4/gtkmm/papersize.h:38: more undefined references to
Glib::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.htmlan,
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' foundund 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 functionmain': /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 1Es 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ß