GTK und C++, Compilen/Linken funktioniert nicht
-
Hallo,
ich hab ein kleine C++ Klasse die ich mit einer GUI versehen möchte.
Also hab ich mir mit Glade (2.10.0) eine nette GUI gebastelt und möchte nun die entsprechende Glade-Datei in meinem Programm verwenden. Dafür hab ich auch schon einiges im Netz gefunden und das entsprechende auch mal per Copy-Paste eingefügt.
Problem ist jetzt für mich, dass ich das ganze noch nie komplett zum laufen gebracht hab. Ich hab es mal geschafft, dass der Compiler/Linker ohne Fehler durchgelaufen ist, dann brachte mir die Anwendung aber die Fehlermeldung, dass eine Datei(cairo-irgendwas) nicht gefunden worden ist. (Cairo ist installiert, devel auch V1.0.0)
Dazu kommt noch, dass ich mit der Entwicklungsumgebung MonoDevelop arbeite ich habs aber auch schon direkt über ein Makefile versucht. Gegoogelt hab ich auch schon fleißig aber leider noch nix passendes gefunden.
Hier mal meine main.cpp:#include <iostream> #include "MCXConnect.h" #include <gtk/gtk.h> //#include <glade/glade.h> #define TELE_HEAD_SIZE 16 using namespace std; int main (int argc, char *argv[]) { //GladeXML *xml; GtkWidget *widget; gtk_init(&argc, &argv); //xml = glade_xml_new("mcx_connect.glade", NULL, NULL); cout << "Testprogramm um einen Socket zum MCX aufzumachen!" << endl; MCXConnect myMCXConnect = MCXConnect(); myMCXConnect.mcx_connect("192.168.102.65", 3000); unsigned char data[] = {1}; myMCXConnect.mcx_sendTele(0x90040210,1, 1, 0, 0 , (TELE_HEAD_SIZE+sizeof(data)), data); return 0; }
OS ist Suse Linux 10.0
Für das erstellen hab ich folgende Einstellungen:
Include-Pfade:
- /opt/gnome/include/libglade-2.0 - /opt/gnome/include/atk-1.0 - /opt/gnome/include/gtk-2.0 - /opt/gnome/include/pango-1.0 - /opt/gnome/include/glib-2.0 - /usr/include/cairo - /opt/gnome/lib/gtk-2.0/include
Linker-Optionen:
-L/usr/lib -L/usr/X11R6/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -lXi -lgdk_pixbuf-2.0 -lm -lpangox -lpangoxft -lXft -lXrender -lXext -lX11 -lfreetype -lpango -latk -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
Aber irgendwie bekomm ich tausende an Fehlern, wobei ich alle Fehler im Bezug auf eine nicht gefundene Header-Datei schon entfernt hab.
Falls mir da mal jemand helfen könnte wäre ich sehr dankbar
Grüßle Oli
-
Hi,
kompilier mal mit:
g++ -o main main.cpp $(pkg-config gtk+-2.0 --cflags --libs)
Die Liste der Sourcecodes musst du halt entsprechend erweitern.
Cheers
GPC
-
GPC schrieb:
Hi,
kompilier mal mit:
g++ -o main main.cpp $(pkg-config gtk+-2.0 --cflags --libs)
Die Liste der Sourcecodes musst du halt entsprechend erweitern.
Cheers
GPC
Ich habs so ähnlich schon versucht, allerdings ohne Klammern dafür mit anführungszeichen. Naja werd ich morgen mal testen.
Thx mal für den Tipp.Grüßle Oli
-
Hi,
also die Variante von dir funktioniertg++ -o main main.cpp $(pkg-config gtk+-2.0 --cflags --libs)
wenn ich das ganze dann in ein Makefile packe geht es nicht:
GTK_MCX_Connector: main.cpp MCXConnect.cpp MCXConnect.h g++ -o GTK_MCX_Connector main.cpp MCXConnect.cpp $(pkg-config gtk+-2.0 --cflags --libs)
Die Fehlermeldung sieht dann so aus:
main.cpp:5:21: error: gtk/gtk.h: Datei oder Verzeichnis nicht gefunden main.cpp: In function ‘int main(int, char**)’: main.cpp:15: error: ‘GtkWidget’ was not declared in this scope main.cpp:15: error: ‘widget’ was not declared in this scope main.cpp:17: error: ‘gtk_init’ was not declared in this scope make: *** [GTK_MCX_Connector] Fehler 1
Hast da auch noch nen Tipp??
Grüßle Oli
-
Ja, ich nehme an, dir fehlen noch die Includes und Libs usw. im Makefile.
In gtkmm sähe das so aus (GTK+ - Beispiel kannste ja leicht ummünzen):
GLIBMM_CFLAGS = -I/usr/local/include/glibmm-2.4 -I/usr/local/lib/glibmm-2.4/include -I/usr/local/include/sigc++-2.0 -I/usr/local/lib/sigc++-2.0/include -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include GLIBMM_LIBS = -L/usr/local/lib -lglibmm-2.4 -lgobject-2.0 -lsigc-2.0 -lglib-2.0 GTKMM_CFLAGS = -DXTHREADS -D_REENTRANT -DXUSE_MTSAFE_API -I/usr/local/include/gtkmm-2.4 -I/usr/local/lib/gtkmm-2.4/include -I/usr/local/include/glibmm-2.4 -I/usr/local/lib/glibmm-2.4/include -I/usr/local/include/gdkmm-2.4 -I/usr/local/lib/gdkmm-2.4/include -I/usr/local/include/pangomm-1.4 -I/usr/local/include/atkmm-1.6 -I/usr/local/include/sigc++-2.0 -I/usr/local/lib/sigc++-2.0/include -I/usr/include/gtk-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/lib/gtk-2.0/include -I/usr/X11R6/include -I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/freetype2/config -I/usr/include/atk-1.0 GTKMM_LIBS = -L/usr/local/lib -lgtkmm-2.4 -lgdkmm-2.4 -latkmm-1.6 -lgtk-x11-2.0 -lpangomm-1.4 -lglibmm-2.4 -lsigc-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
Sry für die Überlänge.
-
Ach ja, makefiles und GTK+ oder gtkmm empfinde ich als ziemlichen Krampf. Als Alternative kann ich aber SCons vorschlagen. Gibt von mir 'nen Artikel dazu im Magazin-Bereich (ganz unten).
-
Hi,
danke für die Antworten.Ich hab dann noch das hier gefunden, das geht auch:
Compiler-Optionen: $(pkg-config --cflags gtkmm-2.4) $(pkg-config --cflags libglademm-2.4) Linker-Optionen: $(pkg-config --libs gtkmm-2.4) $(pkg-config --libs libglademm-2.4)
Wobei das jetzt auch für gtkmm ist, da ich inzwischen umgestiegen bin
..