Anfängerfragen Eclipse und GTK
-
Moin Leute,
ich habe bisher in Java programmiert, da ich bisher immer so meine Schwierigkeiten in C hatte. Nun ist es aber mal wieder so weit. Ich will mich mal wieder daran versuchen. Besonders reizt mich das Thema GTK um damit anspruchsvolle GUIs zu programmmieren. Mein Eclipse 3.2( unter Linux) habe ich um die C-Komponente erweitert. Ich habe mich dazu entschieden ein Managed C-Project aus dem Menü zu wählen, da mir das Makefile einfach noch zu viele Fragen aufwirft und es so generiert wird.
Jetzt aber zu meinem eigentlichen Problem:
In meinem schlauen Buch wird GTK einfach mittels#include <gtk/gtk.h>
eingebunden und später mit
gcc main.cpp -o main `pkg-config --cflags --libs gtk+-2.0`
kompiliert. Das sollte ja nun eigentlich mein Eclipse für mich übernehmen oder nicht? Eclipse kann mit der Include-Anweisung und natürlich dann auch mit dem weiteren Source Code nichts anfangen. Standardmäßig habe ich jede Menge Includes innerhalb meines Projekts aufgelistet. Warum findet Eclipse aber GTK nicht. Wenn ich den Include-Baum aufklappe, finde ich /usr/include/gtk-2.0/gtk/gtk.h. Muß ich den Pfad nehmen?
Ich hoffe, ich konnte mein Problem verständlich rüberbringen und danke schon einmal im Voraus für Eure Hilfe.
Gruß Heiko Heine
-
X-Ray-3 schrieb:
Das sollte ja nun eigentlich mein Eclipse für mich übernehmen oder nicht?
Jo, aber du musst ihm schon sagen, welche Bibliotheken er linken soll. Im Shell Befehl, den du gepostet hast, macht das pkg-config. Evtl. kann Eclipse auch was damit anfangen.
Wenn ich den Include-Baum aufklappe, finde ich /usr/include/gtk-2.0/gtk/gtk.h. Muß ich den Pfad nehmen?
Ja, aber erstell' im /usr/include Verzeichnis einen Link auf gtk-2.0 namens gtk. Sonst funzt dein Code nur bei dir und sonst niemand.
MfG
GPC
-
Ich habe jetzt einen symbolischen Link mit dem Namen "gtk" auf "gtk-2.0/gtk" angelegt. Nun habe ich direkt unter meinen Includes usr/includes/gtk und darunter sind gtk.h, gtkbox.h, gtkbutton.h usw.
Wenn ich nun #include <gtk/gtk.h> schreibe, gibt es keine Fehlermeldung. Deklariere ich aber innerhalb meiner main-Funktion nun z.B. GtkWidget *window, und drücke auf Speichern legt Eclipse los und beruhigt sich nicht mehr.Hier ein Auszug:
/usr/include/gtk/gtkprintsettings.h:127: Fehler: expected constructor, destructor, or type conversion before »*« token
/usr/include/gtk/gtkprintsettings.h:128: Fehler: Variable oder Feld »gtk_print_settings_set_paper_size« als »void« deklariert
/usr/include/gtk/gtkprintsettings.h:128: Fehler: »GtkPrintSettings« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:128: Fehler: »settings« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:129: Fehler: »GtkPaperSize« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:129: Fehler: »paper_size« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:129: Fehler: initializer Ausdrucksliste als zusammengesetzten Ausdruck behandelt
/usr/include/gtk/gtkprintsettings.h:130: Fehler: »gdouble« bezeichnet keinen Typ
/usr/include/gtk/gtkprintsettings.h:132: Fehler: Variable oder Feld »gtk_print_settings_set_paper_width« als »void« deklariert
/usr/include/gtk/gtkprintsettings.h:132: Fehler: »GtkPrintSettings« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:132: Fehler: »settings« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:133: Fehler: »gdouble« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:134: Fehler: expected primary-expression before »unit«
/usr/include/gtk/gtkprintsettings.h:134: Fehler: initializer Ausdrucksliste als zusammengesetzten Ausdruck behandelt
/usr/include/gtk/gtkprintsettings.h:135: Fehler: »gdouble« bezeichnet keinen Typ
/usr/include/gtk/gtkprintsettings.h:137: Fehler: Variable oder Feld »gtk_print_settings_set_paper_height« als »void« deklariert
/usr/include/gtk/gtkprintsettings.h:137: Fehler: »GtkPrintSettings« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:137: Fehler: »settings« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:138: Fehler: »gdouble« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:139: Fehler: expected primary-expression before »unit«
/usr/include/gtk/gtkprintsettings.h:139: Fehler: initializer Ausdrucksliste als zusammengesetzten Ausdruck behandelt
/usr/include/gtk/gtkprintsettings.h:140: Fehler: »gboolean« bezeichnet keinen Typ
/usr/include/gtk/gtkprintsettings.h:141: Fehler: Variable oder Feld »gtk_print_settings_set_use_color« als »void« deklariert
/usr/include/gtk/gtkprintsettings.h:141: Fehler: »GtkPrintSettings« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:141: Fehler: »settings« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:142: Fehler: »gboolean« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:142: Fehler: initializer Ausdrucksliste als zusammengesetzten Ausdruck behandelt
/usr/include/gtk/gtkprintsettings.h:143: Fehler: »gboolean« bezeichnet keinen Typ
/usr/include/gtk/gtkprintsettings.h:144: Fehler: Variable oder Feld »gtk_print_settings_set_collate« als »void« deklariert
/usr/include/gtk/gtkprintsettings.h:144: Fehler: »GtkPrintSettings« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:144: Fehler: »settings« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:145: Fehler: »gboolean« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:145: Fehler: initializer Ausdrucksliste als zusammengesetzten Ausdruck behandelt
/usr/include/gtk/gtkprintsettings.h:146: Fehler: »gboolean« bezeichnet keinen Typ
/usr/include/gtk/gtkprintsettings.h:147: Fehler: Variable oder Feld »gtk_print_settings_set_reverse« als »void« deklariert
/usr/include/gtk/gtkprintsettings.h:147: Fehler: »GtkPrintSettings« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:147: Fehler: »settings« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:148: Fehler: »gboolean« wurde in diesem Gültigkeitsbereich nicht definiert
/usr/include/gtk/gtkprintsettings.h:148: Fehler: initializer Ausdrucksliste als zusammengesetzten Ausdruck behandelt
/usr/include/gtk/gtkprintsettings.h:149: Fehler: »GtkPrintSettings« wurde in diesem Gültigkeitsbereich nicht definiert
-
Hm, mach den Link wieder raus, ich hab deine Verzeichnisangabe falsch gelesen, sorry.
Folgendes wird bei mir gelinkt:gpc@desktop:/usr/include/gtk-2.0$ pkg-config gtk+-2.0 --libs --cflags -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXfixes -lpango-1.0 -lcairo -lX11 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
Vergleich das mal mit dem, was Eclipse dazulinkt.
-
Also, ich habe mein Projekt. Innerhalb dieses Projektes gibt es einen Include-Eintrag. Öffne ich diesen, kommen da wiederum folgende Angaben:
/usr/include/c++/4.11
/usr/include/c++/4.11/i386-redhat-linux
/usr/include/c++/4.11/backward
/usr/local/include
/usr/lib/gcc/i386-redhat-linux/4.1.1/include
/usr/includeUnter /usr/include finde ich zumindest den ersten Teil Deiner Ausgabe.
Also: /usr/include/gtk-2.0
/usr/lib/gtk-2.0/include kann ich ja demnach nicht finden. Der Pfad taucht oben ja gar nicht auf.
Nur mit dem Ende Deiner Augabe kann ich nichts anfangen. Sind das auch Includes?
-
X-Ray-3 schrieb:
Also, ich habe mein Projekt. Innerhalb dieses Projektes gibt es einen Include-Eintrag. Öffne ich diesen, kommen da wiederum folgende Angaben:
/usr/include/c++/4.11
/usr/include/c++/4.11/i386-redhat-linux
/usr/include/c++/4.11/backward
/usr/local/include
/usr/lib/gcc/i386-redhat-linux/4.1.1/include
/usr/includeJa, das sind die Standard Includes für C++. Da fehlt noch das ganze GTK+ Zeugs.
Nur mit dem Ende Deiner Augabe kann ich nichts anfangen. Sind das auch Includes?
Ne, das sind Bibliotheken, gegen die gelinkt wird. Das geht los mit -lgtk-x11-2.0. Das muss bei "Libraries" rein. Der Rest bei "Includes", soweit bei dir vorhanden.
-
So, ich habe nun von Hand jede Include-Pfadangabe hinzugefügt. Über die Properties meines Projektes. Ich habe aber seltsamerweise die Bibliotheken gegen die gelinkt wird nicht angegeben, aber es gibt keine Fehlermeldung. Irgendwie muß es doch aber trotzdem eine einfachere Möglichkeit auch unter Eclipse geben. Vielleicht ja sogar die angabe mit pkg-config???
Na ja, trotzdem danke erstmal.
Gruß Heiko Heine