Grafische Benutzerschnittstellen in C++ mit GTKmm Betriebssystemunabhängig gestalten
1. WILLKOMMEN IN DER WELT VON GTK+
Bevor wir uns mit der betriebssystemunabhängigen GTKmm-Programmierung befassen, möchte ich erst einmal auf die Herkunft und die Entstehung von GTKmm und GTK+ eingehen. GTKmm ist eine portable Bibliothek, mit der man vor allem unter Linux, MacOS und Windows portabel Programme entwerfen kann.
Hierfür müssen die Programme zwar für jedes System neu kompiliert werden, aber dies ist ohne große Änderungen und manchmal auch ganz ohne Änderungen zu bewerkstelligen.
Das Woher, Warum, Wie und Was soll in diesem Tutorial geklärt werden.
Sollte es noch Fragen und Verbesserungsvorschläge geben, schreibt sie mir doch bitte an evilissimo@c-plusplus.de.
Ich werde dieses Tutorial kapitelweise veröffentlichen und verspreche keine regelmäßigen Termine. Ich werde jedoch an dem Tutorial arbeiten.
1.1 Was ist ein Widget
In diesem Tutorial wir sehr häufig das Wort Widget fallen. Nun stellt sich sicher der ein oder andere die Frage: "Was ist ein "Widget" denn überhaupt?"
Als Widgets bezeichnet man meist Steuerelemente. Zu den am häufigsten genutzten Steuerelementen gehören Schaltflächen und Bildlaufleisten. Daneben gibt es eine Vielzahl mehr oder minder häufig genutzter Steuerelemente.[1]
1.2 Was ist GTK+ eigentlich?
GTK steht für "Gimp Tool Kit". Das Gimp Tool Kit ist eine in C geschriebene Bibliothek für eine grafische Benutzerschnittstelle, die ursprünglich als Alternative für Motif unter Linux entwickelt wurde, um somit dem Bildbearbeitungsprogramm GIMP eine Alternative GUI (Graphical User Interface, zu Deutsch: grafische Benutzerschnittstelle) bereitzustellen.
Im Laufe der Zeit hat sich GTK+ zu einer der erfolgreichsten Widget-Bibliotheken entwickelt und ist auf X-Server basierenden Systemen neben dem QT Toolkit auch einer der meist benutzten. GTK+ ist auch die Basis der GNOME Desktop Environment, die der eine oder andere von euch sicherlich kennt.
GTK+ ist zwar in C implementiert, aber mit einem objektorientierten Ansatz, der die Anbindung an objektorientierte Sprachen (wie z.B. Python, Perl und C++ und andere Sprachen) stark vereinfachte, da dies von Anfang an berücksichtigt wurde.
GTKmm ist eine solche Anbindung an GTK+ für C++. Im Gegensatz zum originalen GTK+ besitzt GTKmm eine Klassenhierarchie, die die Entwicklung und Weiterentwicklung neuer Widgets stark vereinfacht. Die Typensicherheit von GTKmm erleichtert dem Programmierer die Arbeit enorm. Hierdurch werden einige Fehler im Quelltext bereits zur Kompilierzeit erkannt, was bei der C-Variante nicht der Fall ist und die Fehler somit z. B. womöglich erst durch undefiniertes Verhalten auftreten.
In GTK+ werden ausschließlich Zeiger verwendet, wovon man als C++-Programmierer Abstand nehmen und stattdessen vermehrt auf Membervariablen zurückgreifen sollte. Dies vereinfacht die Speicherverwaltung enorm.
1.3 GTKmm ist ein Wrapper
GTKmm ist keine native Implementierung eines Toolkits wie es QT z. B. ist. Aber das hat auch Vorteile. So können sich die GTKmm-Entwickler mehr Gedanken darüber machen, eine saubere und transparente Schnittstelle zu schaffen, und müssen sich nicht auf Grund von technischen Details auf Kompromisse einlassen. Ein Beispiel hierfür wäre, dass man auf Grund von technischen Details, Abstriche in der Flexibilität von GTKmm machen müsste.
1.4 Bestandteile von GTKmm
Da GTKmm die GTK+ C Bibliotheken verwendet sind diese ein wichtiger Bestandteil von GTKmm. GTKmm kapselt die C Bibliothek so gut, dass es die Verwendung gegenüber GTK+ sogar noch etwas vereinfacht. Hier eine Auflistung und kurze Erklärung der einzelnen Bestandteile:
1.4.1 GTK+ Bibliotheken
Da GTKmm nur ein Wrapper einer C Bibliothek ist, baut es vor allem erst einmal auf diversen C Bibliotheken auf.
Es handelt sich hier bei um folgende C Bibliotheken:
- libglib-2.0
- libatk-1.0
- libpango-1.0
- libgtk-2.0
- libgdk-2.0
- libintl
- libiconv
und je nach Implementierung auch –libcairo
GLib, Pango, ATK, GDK sind alle Bestandteile von GTK+ selbst, wurden aber unterteilt. Das macht die ganze Sache somit etwas flexibler.
GLib ist der Kern der ganzen Library und bildet die Basis von GTK+ und GNOME. Es erleichtert den Umgang mit Datenstrukturen in C, liefert portable Wrapper für verschiedene betriebssystemabhängige Funktionen und enthält Schnittstellen zur Laufzeitfunktionalität wie z.B. Ereignisschleifen, Threads, dynamisches Laden und ein Objektsystem.
Pango ist eine Layout- und Textrenderingbibliothek mit dem Schwerpunkt auf Internationalisierung. Somit bildet es den Kernteil für den Umgang mit Text- und Schriftarten in GTK+ 2.x.
ATK liefert diverse Schnittstellen für die Zugänglichkeit. Durch das Unterstützen von ATK Schnittstellen kann eine Anwendung oder ein Toolkit mit Werkzeugen wie Bildschirmlesern, Lupen oder alternativen Eingabegeräten benutzt werden.
GDK ist eine Schnittstelle zu nativen Zeichenfunktionen eines Betriebssystems und erhöht damit die Portabilität der Zeichnung von Widgets. Es gibt dafür portable Backends (diverse Bibliotheken mit einem identischen Interface, die man austauschen kann, nennt man in der Regel Backends). GTK+ for Win32 ist z.B. ein solches GDK-Backend für Windows.
GTK+ Implementiert die Widgets und deren Verhalten mit Hilfe der zuvor genannten Bibliotheken.
1.4.2 Bestandteile von GTKmm
GTKmm benötigt neben den eben genannten C Bibliotheken auch noch diverse andere Bibliotheken.:
- libglibmm
- libgtkmm
- libsigc++-2.0
Es gibt noch andereBibliotheken, die aber bei libgtkmm schon dabei sind:
- libatkmm
- libgdkmm
- libpangomm
Wie es bereits auffällt, haben die meisten dieser Bibliotheken einfach nur ein mm als Suffix und sind einfach nur C++-Wrapper der C-Bibliotheken. Da ich in 1.4.1 bereits erwähnt habe, was die einzelnen Bibliotheken tun, werde ich das einfach an dieser Stelle auslassen und direkt auf SigC++ zu sprechen kommen, das die einzige Bibliothek ist, die nicht auf den C-Bibliotheken aufbaut.
SigC++ implementiert ein typensicheres Callback-System in Standard C++. Es erlaubt dem Programmierer, Signale zu definieren und diese mit irgendeiner Callback-Funktion zu verbinden. Dabei können nicht nur Funktionen, sondern auch Methoden verwendet werden, selbst wenn diese statisch oder virtuell sind. Es beinhaltet auch Adapter, die es dem Programmierer ermöglichen, unterschiedliche Callbacks zu verbinden. Es besteht sogar die Möglichkeit, Standardparameter zu übergeben und damit eine Funktion mit mehreren Parametern an eine bestimmte Anforderung anzupassen. Mehr dazu wird es zu einem späteren Zeitpunkt geben, da die Signalbehandlung in GTKmm ein größeres Kapitel brauchen wird.
2. Voraussetzung für dieses Tutorial
Ich setze für dieses Tutorial voraus, dass sich eine Entwicklerversion von GTKmm 2.4.x oder höher auf dem System befindet und dass der Leser die Grundlagen von C++ beherrscht und sich im Klaren ist, um was es sich bei Vererbung, Polymorphie und auch SmartPointern handelt. Fragen bezüglich der Programmierung mit GTKmm können im C/C++-Forum unter der Adresse http://www.c-plusplus.de/forum gestellt werden.
Bezüglich der Installation wird es evtl. ein gesonderte Anleitung geben.
2.1 Bezugsmöglichkeiten für Windows
Unter Windows gibt es dafür Installer, die dem Programmierer alle notwendigen Bibliotheken auf dem System installieren.
Den Installer für alle GTK+ Bibliotheken bekommt man hier:
http://gladewin32.sourceforge.net/
Nach der Installation der GTK+ Bibliotheken braucht man noch die GTKmm Bibliotheken die man auf:
http://www.pcpm.ucl.ac.be/~gustin/win32_ports/
bekommt. Klickt dort im Menü auf „gtkmm on win32“ und auf den Link unter
"Developer (Full) Environment"
(runtime + headers, import libraries, demo, doc).
Solltet ihr vorhaben, mit der DevC++ IDE zu programmieren, empfehle ich euch nach der Installtion der beiden Pakete meinen GTKmm-Template-Installer für DevC++ zu verwenden, der euch eine Vorlage in DevC++ installiert, die bereits sämtliche benötigten Includeverzeichnisse und Bibliotheken in das Projekt einbindet.
Ihr findet den Installer auf http://www.evilissimo-softdev.de/downloads.html.
2.2 Bezugsmöglichkeiten für Linux
Bei Linux hängt es von eurer Distribution ab und ihr solltet euch diesbezüglich noch einmal extra informieren. Fragen zu diesem Thema sind natürlich im GUI Forum des C/C++ Boards willkommen. (http://www.c-plusplus.de/forum/viewforum-var-f-is-51.html)
Da dies ein Tutorial zur Programmierung mit GTKmm werden soll, werden wir an dieser Stelle mit den Nebensächlichkeiten aufhören und mit der Einführung in die Programmierung beginnen.
3. Grundlagen
3.1 Ein einfaches Beispiel
Das erste GTKmm Programm, das ich euch zeigen möchte, ist ein einfaches Fenster von 200 x 200 Pixel.
Hiermit möchte ich verdeutlichen, wie einfach es sein kann, eine GTKmm Anwendung zu schreiben.
Nun es ist nicht viel Code, aber es erzeugt schon ein Fenster. Nun werde ich detailierter auf die einzelnen Zeilen eingehen und ein paar Bemerkungen dazu machen.
C/C++ Code:
#include <gtkmm.h>
C/C++ Code:
#include <gtkmm.h>
C/C++ Code:
#include <gtkmm.h>
Wir binden mit dieser Zeile alle Headerdateien ein, die zu GTKmm gehören; dies gilt dann auch für GDKmm, Glibmm, Pangomm und SigC++. Der Nachteil dieser Zeile ist, dass sie bei größeren Projekten zu längeren Kompilierzeiten führt, da erst einmal alle Header analysiert werden müssen. Daher ist es empfehlenswert, aber nicht zwingend notwendig, nur die benötigten Header einzubinden. In unserem Fall wären das die folgenden:
Der normale Programmeinstiegspunkt, der aus C++, aber auch aus C Programmen bekannt sein sollte.
C/C++ Code:
Gtk::Main main_obj(argc, argv);
C/C++ Code:
Gtk::Main main_obj(argc, argv);
C/C++ Code:
Gtk::Main main_obj(argc, argv);
Mit dieser Zeile starten wir das GTK+- und GTKmm-Subsystem und stellen durch Übergeben der Parameter argc und argv sicher, dass auch unsere Anwendung wie alle GTK+ Anwendungen bestimmte Standardparameter annimmt und auswertet. Damit passen wir unser Programm nur an das Verhalten anderer GTK+ Programme an. Mehr müssen wir darüber nicht wissen, es sei denn, wir möchten selber Parameter übergeben - dann solltet ihr eure Auswertung der Parameter erst nach GTKmm durchführen, da GTKmm sie zur Initialisierung benötigt!
Merke: Immer erst das GTKmm Subsystem starten.
Die restlichen zwei Zeilen sind nicht sonderlich spektakulär, aber ich werde trotzdem kurz erklären, was diese tun.
C/C++ Code:
Gtk::Window window_obj;
C/C++ Code:
Gtk::Window window_obj;
C/C++ Code:
Gtk::Window window_obj;
Erstellt ein Fensterobjekt, das wir mir der Zeile:
C/C++ Code:
main_obj.run(window_obj);
C/C++ Code:
main_obj.run(window_obj);
C/C++ Code:
main_obj.run(window_obj);
starten.
Nachdem wir den Sourcecode in eine Sourcedatei gepackt haben - ich nenne sie hier mal einfach "beispiel1.cpp" - werden wir die Anwendung kompilieren.
Je nach OS wird anders kompiliert. Die Windows-User mit DevC++ drücken vielleicht einfach nur F9. Unix/Linux/*BSD/Whatever-User schreiben dann eher
Da dies sehr unterschiedlich ist, möchte ich an dieser Stelle nicht tiefer darauf eingehen. Diese Fragen werden gerne im GUI-Forum auf dem C/C++ Board (http://www.c-plusplus.de/forum/viewforum-var-f-is-51.html) beantwortet und erhalten dann sicherlich auch Einzug in die FAQ.
Und so sieht das dann z.B. unter Window XP aus:
Soviel zum ersten Teil des Tutorials. Ich freue mich schon auf euer Feedback. Im nächsten Teil werde ich euch die ersten Widgets näher bringen. Darunter fallen Label, Buttons und das GTK Boxen System. Auch eine kleine Einführung in die Verwendung von Signalen. Mehr dazu im nächsten Teil.
Interessant :) Ich freu mich schon auf die ersten Widgets, und ob man damit "vernünftig" GUIs programmieren kann, im sinne von leichtem Entwurf und Wartung!
_________________ Frage an mich? korbinian at c-plusplus dot de
Mmmh, sieht interessant aus. Werds mal durcharbeiten, wenn ich Zeit finde. Hab bis jetzt mit C++ noch keine GUIs erstellt.
_________________ Your password must be at least 18770 characters and cannot repeat any of your previous 30689 passwords. Please type a different password. Type a password that meets these requirements in both text boxes. (http://support.microsoft.com/kb/276304/en-us/)
Oh, das finde ich jetzt aber auch mal richtig interessant!
Werde es zwar erst später durcharbeiten, wenn ich C++ noch etwas vertieft habe, aber für GUI hab ich eh schon GTK favorisiert (weil: auch linux).
Ein *.pdf fänd ich noch super, falls das möglich wäre.
hallo evilissimo,
ich bekomme das unter windows nicht zum laufen obwohl ich gtk und gtkmm wie beschrieben installiert habe.
Was habe ich vergessen bzw falsch gemacht?
meine ausgabe ist:
C:\Dokumente und Einstellungen\x\Desktop>g++ beispiel1.cpp `pkg-config gtkmm-2.4
--cflags --libs` -o beispiel1
g++: `pkg-config: No such file or directory
g++: gtkmm-2.4: No such file or directory
cc1plus.exe: error: unrecognized command line option "-fcflags"
cc1plus.exe: error: unrecognized command line option "-flibs`"
ach ja, ich habe gtk-win32-devel-2.8.6-rc3.exe und gtkmm-devel-2.6.2-1.exe zusammen benutzt. dein installer für Dev-C++ gab kein feedback...
gruss, lin
Das funktioniert so auch nicht unter Windows. Nach dem du meinen Installer benutzt hast, gehe ich einefach mal davon aus das du Dev-C++ schon installiert hast. Starte Dev-C++ und öffne ein neues GTKmm Projekt. Nun einfach mal F9 drücken.
( Nur so btw: Das mit den Backticks ( ` ) funktioniert in der Windows Konsole nicht. )
vielen dank für die beschreibung,
ich habe das allerdings genau so versucht, aber in meiner Projektauswahl kann ich nicht Gtkmm Applikation anwählen (auch nicht wenn ich scrolle;)).
Ich habe Dev-C++ schon installiert gehabt, Version 4.9.8.0, und die liegt bei mir im Verzeichnis C:\Programme\Dev-Cpp, vielleicht hängt das damit zusammen?
vielleicht habe ich auch einen anderen fehler...
mein bs: windows xp, ist wohl ok...
mein compiler: gcc version 3.4.2 (mingw-special), läuft ohne probleme
mein gtk-installer: gtk-win32-devel-2.8.6-rc3.exe
mein gtkmm-installer: gtkmm-devel-2.6.2-1.exe
vielleicht vertragen sich ja die versionen von gtk und gtkmm nicht, habe allerdings nichts dazu gefunden...
gtk-demo.exe und gtkmm-demo.exe laufen, dann müsste doch eigentlich bei der installation alles glatt gelaufen sein.
mit pkg-config.exe(?) habe ich nichts konfiguriert, ich denke die kann ich so lassen, da doch alle librarys die ich für meine gtkmm-anwendung benötige von deinem installer über dev-c++ angesprochen werden.
1000 dank schon mal für den support.
habe jetzt den neuen Dev-C++ installiert.
super sache mit deinem installer, der automatisch generierte code lässt sich kompilieren , aber leider nicht ausführen .
Die Fehlermaldung sagt, dass der Prozedureinstiegspunkt libconv_set_relocation_prefix in der iconv.dll nicht gefunden wurde.
Kannst du damit was anfangen?
ok, ich habe nachgelesen, dass dies passieren kann wenn man mehrere (unterschiedliche) versionen der gleichen dll's auf dem rechner hat, und wenn mit der einen compiliert wird und die andere aufgerufen wird bei der programmausführung - shit...
habe also eine dll umbenannt, und es folgt eine andere fehlermeldung, toll!
keine ahnung was ich jetzt tun soll, alles nochmal deinstallieren und neu installieren, habe allerdings auch eine laufende c++ eclipse umgebung die ich eigentlich nicht zerstören wollte weil das mühsam war die zum laufen zu bekommen....
ok, ich habe nachgelesen, dass dies passieren kann wenn man mehrere (unterschiedliche) versionen der gleichen dll's auf dem rechner hat, und wenn mit der einen compiliert wird und die andere aufgerufen wird bei der programmausführung - shit...
habe also eine dll umbenannt, und es folgt eine andere fehlermeldung, toll!
keine ahnung was ich jetzt tun soll, alles nochmal deinstallieren und neu installieren, habe allerdings auch eine laufende c++ eclipse umgebung die ich eigentlich nicht zerstören wollte weil das mühsam war die zum laufen zu bekommen....
Eine möglichkeite wäre es sämtlich GTK+ Programme und libraries zu deinstallieren und neu zu installieren
Und ein Reboot wäre auch gut dazwischen ( zwischen deinstall und install )
Achja und du solltest die Development libs vorher installieren.
1000 dank evilissimo, es funktioniert jetzt alles!!
falls jemand ähnliche probleme hat, hier meine anleitung was ich gemacht habe.
1. alles was mit c++ zu tun hat deinstalliert
2. minGW + msys installiert als compiler umgebung für c/c++
3. gtk-win32-devel-2.6.10-rc1.exe installiert
4. gtkmm-devel-2.6.2-1.exe installiert
5. devcpp-4.9.9.2_nomingw_setup.exe installiert
dann konnte ich den installer von evilissimo benutzen und alles läuft.
vorsicht manche versionen von gtk und gtkmm vertragen sich nicht.
freue mich jetzt auf deinen 2ten teil vom tutorial.
Falls jemand eine Möglichkeit kennt wie ich Eclipse konfigurieren kann,
um gtkmm-projekte zu kompilieren wäre ich sehr dankbar, das hier zu posten bzw zu linken. Selber habe ich da noch nix gefunden...
So, jetzt wollte ich mir GTK auch endlich mal installieren, bekomme es aber auch nicht zum laufen.
Ich verwende als IDE MinGWStudio, mein Problem liegt darin, dass ich nicht weiß wohin ich "gtk-win32-devel-2.8.8-rc2.exe" und "gtkmm-devel-2.8.1-1.exe" installieren lassen soll, damit das MingGWStudio die include-Dateien findet.
Jep, aber da kam trotzdem eine file not found Meldung.
Ich habe jetzt nochmal alles neu installiert, scheint jetzt zu funktionieren, er kompilliert den Code, kann die exe aber nicht ausführen.
Bei Project kann ich nur "GTK+ Application" auswählen, ich will aber GTKmm oder?
Kann man das irgendwie hinzufügen?
Es lässt sich jetzt kompillieren und linken, wenn ich das Programm ausführe öffnet sich aber ein Konsolenfenster und es erscheint folgende Fehlermeldung:
test.exe - Einsprungpunkt nicht gefunden
Der Prozedureinsprungpunkt "XML_SetDoctypeDeclHandler" wurde in der DLL "xmlparse.dll" nicht gefunden.
Danach steht im geöffneten Konsolenfenster:
Terminated with return code 128
Press any key to continue ...
Dann hast du warscheinlich eine ältere/andere Runtime Version von GTK+ auf dem system und das beist sich ( z.b. von Dia oder Gimp ) Da hilft nur alle GTK+ sachen zu deinstallieren und dann erst mal das GTK+ Develpaket installieren und dann wieder Gimp oder was man an Anwendungen so verwendet.
wenn ich daheim bin, kann ich dir gerne meine Installation packen und zum Download
zur Verfuegung stellen. Kann dir auch, alternativ, die Packete, die ich zur
Installation genutzt habe, zur Verfuegung stellen, falls du mir dahingehend vertraust,
dass die selbstentpackenden Archive nicht boesartig modifiziert sind (kann dir hier
lediglich mein Wort geben).
Wo genau ich die runtergeladen habe, weiss ich nicht auswendig. Weiss aber, dass man
von der gtkmm-Homepage auf diese Seiten kommt. Koenntest da hoechstens nochmal nach
suchen.
mfg
v R
_________________ virtuell Realisticer, innen gut, aussen besser
Danke danke, es läuft jetzt!
Ich hab jetzt die selbe Kombination aus GTK und GTKmm wie linlinlin auf Seite 2 verwendet, danach nochmal die Variablen von pkg-config neu eingetragen und nun funktioniert es.
Wenn ich das Programm jetzt öffne, startet aber auch ein Konsolenfenster, ist das normal?
Was mich jetzt interessieren Würde ob das dann auch bei Warnungen funktioniert. Wenn ja wäre das sehr interessant :xmas2:
Kann dir nicht folgen, wie meinst du das?
Naja wenn GTK+ warnungen ausgibt öffnet sich immer ein Konsolen Fenster auch mit -mwindows. Ich würde gerne wissen ob das fenster dann gar nicht erst aufgeht wenn man deine Technik verwendet
Evtl hast du das schon mal bei Gimp oder Dia gesehen falls du das überhaupt benutzt.
Was mich jetzt interessieren Würde ob das dann auch bei Warnungen funktioniert. Wenn ja wäre das sehr interessant :xmas2:
Kann dir nicht folgen, wie meinst du das?
Naja wenn GTK+ warnungen ausgibt öffnet sich immer ein Konsolen Fenster auch mit -mwindows. Ich würde gerne wissen ob das fenster dann gar nicht erst aufgeht wenn man deine Technik verwendet
Ach jetzt, also meines Wissens geht nix auf, aber ich programmiere mit Gtkmm primär eh unter/für Linux. Du hast es ja unter Win installiert, oder? Würdest du mir mal einen Gefallen tun und ein Gtkmm Programm von mir kompilieren und testen, wie es sich unter Windows verhält? Ich würde dir den tarball per C++ - Account schicken. Keine Angst, ich schick dir keine Viren oder ähnliches.
Zitat:
Evtl hast du das schon mal bei Gimp oder Dia gesehen falls du das überhaupt benutzt.
Ja, ist mir bekannt, und nochmal ja, ich benutze Gimp (so gut ich kann, bin kein guter Grafik-Designer ). Aber ich benutze es unter Linux, da geht keine Konsole auf
Sorry, um halb acht war ich noch nicht daheim. Jetzt müsstest du sie eigentlich haben, hab sie an evilissimo Klammeraffe c-plusplus Punkt de geschickt.
EDITS: Email entschärft und Zeit korrigiert *grml*
Zuletzt bearbeitet von GPC am 21:33:45 21.12.2005, insgesamt 2-mal bearbeitet
Ursprünglich wollte ich es übersetzen. Ich verwende auch zum Teil das GTKmm Tutorial als Vorlage aber es fließen auch eigene Eindrücke in das Tutorial mit ein. Ausserdem wird es nicht ganz so streng gegliedert sein.
Aber momentan finde ich die Zeit und ( wenn ich mal Zeit habe ) die Lust, um daran weiter zuarbeiten, nicht.
Ich hoffe ich kann mich demnächst mal dazu aufraffen weiter zumachen
funktioniert gtk denn nicht mit studios wie ms visual .net 2003 etc? bekomme da folgende fehlermeldungen beim kompilieren:
LINK : error LNK2020: Nicht aufgelöstes Token (0A00000E) Gtk.Main.__dtor
LINK : fatal error LNK1120: 1 unaufgelöste externe Verweise
Wie siehts eigentlich mit Teil2 aus ist der schon in Arbeit oder ???
Bisher noch nicht, jedenfalls ist der Red. nichts bekannt. AFAIK hat evilissimo grad sehr wenig Zeit.
TravisG schrieb:
funktioniert gtk denn nicht mit studios wie ms visual .net 2003 etc? bekomme da folgende fehlermeldungen beim kompilieren:
LINK : error LNK2020: Nicht aufgelöstes Token (0A00000E) Gtk.Main.__dtor
LINK : fatal error LNK1120: 1 unaufgelöste externe Verweise
Doch, sollte normal funktionieren. Hast du auch alle Libs korrekt installiert und die Pfade gesetzt?
Ursprünglich wollte ich es übersetzen. Ich verwende auch zum Teil das GTKmm Tutorial als Vorlage aber es fließen auch eigene Eindrücke in das Tutorial mit ein. Ausserdem wird es nicht ganz so streng gegliedert sein.
Aber momentan finde ich die Zeit und ( wenn ich mal Zeit habe ) die Lust, um daran weiter zuarbeiten, nicht.
Ich hoffe ich kann mich demnächst mal dazu aufraffen weiter zumachen
Ich hab da eine Frage: Ich wollte nun auch GTKmm mit Visual C++ 2002 nutzen um nicht z.B. Server mit Visual C++ 2002 und Client mit Dev C++ kompilieren zu müssen fragen, ob hier jemand Erfahrung mit Visual C++ 2002 hat und, ob das ohne Probleme läuft? Wollte nicht wieder Tagelang fummeln um dann festzustellen, dass ichs wieder nicht installiert kriege.
Und noch eine Frage: Gibt es einen Fenster Designer oder muss alles per Code geregelt werden? Sorry, falls das in den folgenden Teilen schon erklärt wurde, falls es sowas gibt, aber ich wollte bevor ich da richtig einsteige erst Oben genanntens beantwortet haben.
Ansonsten weiter so
Übrigens find ich das die Bildchen der Fenster Mut machen und Motivieren, prima Sache
Kann es sein, dass du Downloads auf deiner Seite deaktiviert hast? Ich kann nichts runterladen. Ich kriege werde zur index.php weitergeleitet.
ja, das problemchen hatte ich gestern auch. wenn du zum beispiel den template installer herunterladen willst musst du den link:
http://www.evilissimo.net/files/downloads/dcgti.zip
in:
http://blog.evilissimo.net/files/downloads/dcgti.zip
ändern, dann gehts.
beim ausführen des templateinstallers bekam ich erst die fehlermeldung, dass ich die variabble PKG_CONFIG_PATH exportieren soll, weil er die datei "gtkmm-2.4.pc" nicht gefunden hat. der pfad lautet nun: C:\Programme\GTK\lib\pkgconfig. scheint also funktioniert zu haben, da nun eine andere fehlermeldung kommt. nun sucht der installer nach der datei "libpng12.pc". das dumme ist nur: ich habe eine libpng.pc und eine libpng13.pc - nur keine libpng12.pc
ein umbenennen der datei libpng.pc in libpng12.pc endete damit, dass der installer das template vernünftig installiert hat - allerdings bekomme ich nun vom compiler ohne ende fehler. der erste hat etwas mit der cairo.h zu tun. wenn ich das richtig sehe, wird es wohl an meiner copy/rename aktion mit der datei liegen.
wo bekomme ich die datei nun her? bzw warum habe ich andere, als ich haben sollte ?
winxp pro
dev-cpp 4.9.9.2
gtk-win32-devel-2.8.18-rc1
gtkmm-devel-2.8.8-2
wenn ich zum beispiel den code aus dem tutorial(projekt wurde mit dem template erstellt):
compiliere, bekomme ich diese meldungen von devcpp:
30 C:\Programme\GTK\include\gtk-2.0\gdk\gdkcairo.h:25, from C:\Programme\GTK\include\gtk-2.0\gdk\gdk.h In file included from C:/Programme/GTK/include/gtk-2.0/gdk/gdkcairo.h:25, from C:/Programme/GTK/include/gtk-2.0/gdk/gdk.h
31 C:\Programme\GTK\include\gtk-2.0\gdk\gdk.h:30, from C:\Programme\GTK\include\gtk-2.0\gtk\gtkmain.h from C:/Programme/GTK/include/gtk-2.0/gdk/gdk.h:30, from C:/Programme/GTK/include/gtk-2.0/gtk/gtkmain.h
31 C:\Programme\GTK\include\gtk-2.0\gtk\gtkmain.h:31, from C:\Programme\GTK\include\gtkmm-2.4\gtkmm\main.h from C:/Programme/GTK/include/gtk-2.0/gtk/gtkmain.h:31, from C:/Programme/GTK/include/gtkmm-2.4/gtkmm/main.h
1 C:\Programme\GTK\include\gtkmm-2.4\gtkmm\main.h:31, from main.cpp from C:/Programme/GTK/include/gtkmm-2.4/gtkmm/main.h:31, from main.cpp
1 D:\Area51\GTKmm\low\main.cpp from main.cpp
66 C:\Programme\GTK\include\pango-1.0\pango\pangocairo.h expected `,' or `...' before '*' token
66 C:\Programme\GTK\include\pango-1.0\pango\pangocairo.h ISO C++ forbids declaration of `cairo_font_options_t' with no type
67 C:\Programme\GTK\include\pango-1.0\pango\pangocairo.h expected init-declarator before '*' token
67 C:\Programme\GTK\include\pango-1.0\pango\pangocairo.h expected `,' or `;' before '*' token
31 C:\Programme\GTK\include\gtk-2.0\gdk\gdk.h:50, from C:\Programme\GTK\include\gtk-2.0\gtk\gtkmain.h In file included from C:/Programme/GTK/include/gtk-2.0/gdk/gdk.h:50, from C:/Programme/GTK/include/gtk-2.0/gtk/gtkmain.h
31 C:\Programme\GTK\include\gtk-2.0\gtk\gtkmain.h:31, from C:\Programme\GTK\include\gtkmm-2.4\gtkmm\main.h from C:/Programme/GTK/include/gtk-2.0/gtk/gtkmain.h:31, from C:/Programme/GTK/include/gtkmm-2.4/gtkmm/main.h
1 C:\Programme\GTK\include\gtkmm-2.4\gtkmm\main.h:31, from main.cpp from C:/Programme/GTK/include/gtkmm-2.4/gtkmm/main.h:31, from main.cpp
51 C:\Programme\GTK\include\gtk-2.0\gdk\gdkscreen.h ISO C++ forbids declaration of `cairo_font_options_t' with no type
51 C:\Programme\GTK\include\gtk-2.0\gdk\gdkscreen.h expected `;' before '*' token
106 C:\Programme\GTK\include\gtk-2.0\gdk\gdkscreen.h expected `,' or `...' before '*' token
106 C:\Programme\GTK\include\gtk-2.0\gdk\gdkscreen.h ISO C++ forbids declaration of `cairo_font_options_t' with no type
107 C:\Programme\GTK\include\gtk-2.0\gdk\gdkscreen.h expected init-declarator before '*' token
107 C:\Programme\GTK\include\gtk-2.0\gdk\gdkscreen.h expected `,' or `;' before '*' token
D:\Area51\GTKmm\low\Makefile.win [Build Error] [main.o] Error 1
ciao!
Zuletzt bearbeitet von squirr am 09:21:41 07.08.2006, insgesamt 1-mal bearbeitet
Kann es sein, dass du Downloads auf deiner Seite deaktiviert hast? Ich kann nichts runterladen. Ich kriege werde zur index.php weitergeleitet.
MFG winexec*
Die Links sollten jetzt wieder gehen, ich hab die alte Seite ausgemistet. Und musste erst mal schauen wie ich das mit der .htaccess datei drehe damit die alten Links auf der neuen Adresse funktionieren.
Die links sollten nun ohne große Änderungen gehen.
@squirr
Leider ist pkg-config zur Zeit kaputt sonst würde es einwandfrei gehen (da der installer darauf aufsetzt ist das eigentlich schon eine Voraussetzung)
Von hand ist das ziemlich aufwendig, du musst nämlich sämtliche Verzeichnisse angeben in denen die Header sind. Dazu kommt das es auch noch Headerverzeichnisse bei den Bibliotheken gibt, etwas sehr mühsam aber es ist theoretisch machbar.
Als nächstes musst du dann noch alle Bibliothekspfade setzen und alle Bibliotheken die du dafür brauchst einbinden.
Ich hab da eine Frage: Ich wollte nun auch GTKmm mit Visual C++ 2002 nutzen um nicht z.B. Server mit Visual C++ 2002 und Client mit Dev C++ kompilieren zu müssen fragen, ob hier jemand Erfahrung mit Visual C++ 2002 hat und, ob das ohne Probleme läuft? Wollte nicht wieder Tagelang fummeln um dann festzustellen, dass ichs wieder nicht installiert kriege.
Und noch eine Frage: Gibt es einen Fenster Designer oder muss alles per Code geregelt werden? Sorry, falls das in den folgenden Teilen schon erklärt wurde, falls es sowas gibt, aber ich wollte bevor ich da richtig einsteige erst Oben genanntens beantwortet haben.
Ansonsten weiter so
Übrigens find ich das die Bildchen der Fenster Mut machen und Motivieren, prima Sache
Gruß Patrick
Soweit ich weiß geht das mit VC++2k2 nicht mehr, zumindest die neuen GTKmm Versionen wirst du damit nicht mehr benutzen können, da diese auf VC++8 aka VC++ 2005 ausgelegt sind (Express geht auch!)
Einen Fenster Designer gibt es auch (glade) und das was du damit umsetzt solltest du mit libglademm benutzen (da der generierte Code schrecklich ist).
Aber als erstes solltest du bei GTKmm ohne Designer zurecht kommen, das ist Empfehlenswert (den Designer solltest du am Anfang höchtens dafür einsetzen, das du weißt wie du deine GUI am besten zusammensetzt aber implementieren solltest du es erst einmal selbst.)
Leider ist pkg-config zur Zeit kaputt sonst würde es einwandfrei gehen (da der installer darauf aufsetzt ist das eigentlich schon eine Voraussetzung)
Von hand ist das ziemlich aufwendig, du musst nämlich sämtliche Verzeichnisse angeben in denen die Header sind. Dazu kommt das es auch noch Headerverzeichnisse bei den Bibliotheken gibt, etwas sehr mühsam aber es ist theoretisch machbar.
Als nächstes musst du dann noch alle Bibliothekspfade setzen und alle Bibliotheken die du dafür brauchst einbinden.
hey!
"pkg-config zur Zeit kaputt" *ggg* wie, kaputt?
da ich etwas langeweile hatte, habe ich mal versucht sämtliche headerverzeichnisse einzubinden, die ich in den gtk-ordnern gefunden habe. leider ohne erfolg - an den fehlern ändert sich nichts.
dann muss gtk wohl noch etwas auf mich warten. woher weiß ich denn, ob die pkg-config wieder funktioniert?
ich wollte mich ebenfalls an der GTKmm-Programmierung probieren, bin allerdings schon bei der Installation und dem 1. Tutorial gescheitert und komme nun nicht weiter.
Nach der Installation von gtk-win32-devel-2.8.18-rc1.exe und gtkmm-devel-2.8.8-2.exe habe ich das Template von evilissimo installiert.
In Dev-Cpp gibt es nun bei mir wie beschrieben, die Option für eine Gtkmm-Applikation. Leider treten dort beim Kompillieren folgende Probleme auf:
Compiler: Default compiler
Building Makefile: "C:\Programmierung\Dev-Cpp\Examples\Makefile.win"
Führt make... aus
make.exe -f "C:\Programmierung\Dev-Cpp\Examples\Makefile.win" all
g++.exe -c main.cpp -o main.o -I"lib/gcc/mingw32/3.4.2/include" -I"include/c++/3.4.2/backward" -I"include/c++/3.4.2/mingw32" -I"include/c++/3.4.2" -I"include"
In file included from main.cpp:1:
mywindow.hpp:4:19: gtkmm.h: No such file or directory
In file included from main.cpp:1:
mywindow.hpp:6: error: `Gtk' has not been declared
mywindow.hpp:7: error: expected class-name before '{' token
main.cpp: In function `int main(int, char**)':
main.cpp:5: error: `Gtk' has not been declared
main.cpp:5: error: `Main' undeclared (first use this function)
main.cpp:5: error: (Each undeclared identifier is reported only once for each function it appears in.)
main.cpp:5: error: expected `;' before "main_obj"
main.cpp:7: error: `main_obj' undeclared (first use this function)
main.cpp:8: error: `EXIT_SUCCESS' undeclared (first use this function)
Compiler: Default compiler
Building Makefile: "C:\Programmierung\Dev-Cpp\Examples\Makefile.win"
Führt make... aus
make.exe -f "C:\Programmierung\Dev-Cpp\Examples\Makefile.win" all
g++.exe -c main.cpp -o main.o -I"lib/gcc/mingw32/3.4.2/include" -I"include/c++/3.4.2/backward" -I"include/c++/3.4.2/mingw32" -I"include/c++/3.4.2" -I"include"
In file included from main.cpp:1:
mywindow.hpp:4:19: gtkmm.h: No such file or directory
In file included from main.cpp:1:
mywindow.hpp:6: error: `Gtk' has not been declared
mywindow.hpp:7: error: expected class-name before '{' token
main.cpp: In function `int main(int, char**)':
main.cpp:5: error: `Gtk' has not been declared
main.cpp:5: error: `Main' undeclared (first use this function)
main.cpp:5: error: (Each undeclared identifier is reported only once for each function it appears in.)
main.cpp:5: error: expected `;' before "main_obj"
main.cpp:7: error: `main_obj' undeclared (first use this function)
main.cpp:8: error: `EXIT_SUCCESS' undeclared (first use this function)
Compiler: Default compiler
Building Makefile: "C:\Programmierung\Dev-Cpp\Examples\Makefile.win"
Führt make... aus
make.exe -f "C:\Programmierung\Dev-Cpp\Examples\Makefile.win" all
g++.exe -c main.cpp -o main.o -I"lib/gcc/mingw32/3.4.2/include" -I"include/c++/3.4.2/backward" -I"include/c++/3.4.2/mingw32" -I"include/c++/3.4.2" -I"include"
In file included from main.cpp:1:
mywindow.hpp:4:19: gtkmm.h: No such file or directory
In file included from main.cpp:1:
mywindow.hpp:6: error: `Gtk' has not been declared
mywindow.hpp:7: error: expected class-name before '{' token
main.cpp: In function `int main(int, char**)':
main.cpp:5: error: `Gtk' has not been declared
main.cpp:5: error: `Main' undeclared (first use this function)
main.cpp:5: error: (Each undeclared identifier is reported only once for each function it appears in.)
main.cpp:5: error: expected `;' before "main_obj"
main.cpp:7: error: `main_obj' undeclared (first use this function)
main.cpp:8: error: `EXIT_SUCCESS' undeclared (first use this function)
make.exe: *** [main.o] Error 1
Ausführung beendet
Gebe ich in die Konsole: pkg-config --cflags gtkmm-2.4 ein, gibt es folgende Fehlermeldung:
Code:
C:\Programmierung\Dev-Cpp\bin> pkg-config --cflags 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
Code:
C:\Programmierung\Dev-Cpp\bin> pkg-config --cflags 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
Code:
C:\Programmierung\Dev-Cpp\bin> pkg-config --cflags 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
Leider weiß ich nicht was es mit der PKG_CONFIG_PATH Umgebungsvariable auf sich hat und wo man diese ändern kann.
Ich habe mir dieses Tutorial durchgelesen und finde es super! Ich habe jetzt schon versucht das ganze unter Windows zum Laufen zu bringen, unter Linux habe ich es zum Laufen gebracht ;-).
Leider habe ich es unter Windows noch nicht geschaft.
undefined reference to `Gtk::Window::Window(Gtk::WindowType)'
Main.cc:21: undefined reference to `Gtk::Main::run(Gtk::Window&)'
Main.cc:23: undefined reference to `Gtk::Window::~Window()'
Main.cc:23: undefined reference to `Gtk::Main::~Main()'
Main.cc:23: undefined reference to `Gtk::Window::~Window()'
Main.cc:23: undefined reference to `Gtk::Main::~Main()'
Code:
undefined reference to `Gtk::Window::Window(Gtk::WindowType)'
Main.cc:21: undefined reference to `Gtk::Main::run(Gtk::Window&)'
Main.cc:23: undefined reference to `Gtk::Window::~Window()'
Main.cc:23: undefined reference to `Gtk::Main::~Main()'
Main.cc:23: undefined reference to `Gtk::Window::~Window()'
Main.cc:23: undefined reference to `Gtk::Main::~Main()'
Code:
undefined reference to `Gtk::Window::Window(Gtk::WindowType)'
Main.cc:21: undefined reference to `Gtk::Main::run(Gtk::Window&)'
Main.cc:23: undefined reference to `Gtk::Window::~Window()'
Main.cc:23: undefined reference to `Gtk::Main::~Main()'
Main.cc:23: undefined reference to `Gtk::Window::~Window()'
Main.cc:23: undefined reference to `Gtk::Main::~Main()'
Ich sags auch gleich ich habe nicht alle libs einzeln hinzugefügt sondern mit den commands:
Äh, nein. Weißt du, ich habe keine Ahnung, wie das mit NetBeans und C++ funktioniert, da ich es ehrlich gesagt für ziemlich daneben halte, eine Java IDE für das Programmieren von C++ zu verwenden, aber jedem das seine
Im Grunde solltest du das, was ich oben getippt habe, mal in die MinGW-Shell eingeben, um zu testen, ob's klappt.
Alternativ könntest du auch gtkmm mit dem Visual Studio benutzen, siehe hier.
Und nein, cairo(mm) brauchst du nicht für Standard GTK+ bzw. gtkmm Anwendungen. Das ist eher wie ein bisserl Zucker auf den Kuchen drauf.
Äh, nein. Weißt du, ich habe keine Ahnung, wie das mit NetBeans und C++ funktioniert, da ich es ehrlich gesagt für ziemlich daneben halte, eine Java IDE für das Programmieren von C++ zu verwenden, aber jedem das seine
Im Grunde solltest du das, was ich oben getippt habe, mal in die MinGW-Shell eingeben, um zu testen, ob's klappt.
Alternativ könntest du auch gtkmm mit dem Visual Studio benutzen, siehe hier.
Und nein, cairo(mm) brauchst du nicht für Standard GTK+ bzw. gtkmm Anwendungen. Das ist eher wie ein bisserl Zucker auf den Kuchen drauf.
hrhrhr , naja sagen wir es so, ich arbeite Tag, täglich mit VS2005 aber programmiere dort in C#. Das Problem ist ja VS nicht unter Linux rennt(und bitte nicht mit Wine ;-)). Das ist ja der ausschlaggebende Grund. Unter Linux gibt es zwar KDevelop, Anjuta usw...nur wollte ich eben eine IDE(für Win und Linux), ich habe versucht mit Eclipse mein Problem zu lösen aber da besteht ja das Problem mit den `` unter Windows, das im Gegensatz "Netbeans" anscheinend besser gelöst hat...denn soweit war ich noch nie...
Ich war im Moment konfus, da ja unter Windows der Befehl ned funktioniert...
Oki, dann liegt es anscheinend an den Versionen...den Zucker brauch ich derzeit nicht, aber vielleicht einen Kaffee...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
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
Main.cc:9:19: gtkmm.h: No such file or directory
Main.cc:10: error: expected namespace-name before ';' token
Main.cc:10: error: `<type error>' is not a namespace
Main.cc: In function `int main(int, char**)':
Main.cc:16: error: `Main' undeclared (first use this function)
Main.cc:16: error: (Each undeclared identifier is reported only once for each function it appears in.)
Main.cc:16: error: expected `;' before "kit"
Main.cc:18: error: `Window' undeclared (first use this function)
Main.cc:18: error: expected `;' before "window"
Main.cc:20: error: `Main' has not been declared
Main.cc:20: error: `window' undeclared (first use this function)
Main.cc:20: error: `run' undeclared (first use this function)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
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
Main.cc:9:19: gtkmm.h: No such file or directory
Main.cc:10: error: expected namespace-name before ';' token
Main.cc:10: error: `<type error>' is not a namespace
Main.cc: In function `int main(int, char**)':
Main.cc:16: error: `Main' undeclared (first use this function)
Main.cc:16: error: (Each undeclared identifier is reported only once for each function it appears in.)
Main.cc:16: error: expected `;' before "kit"
Main.cc:18: error: `Window' undeclared (first use this function)
Main.cc:18: error: expected `;' before "window"
Main.cc:20: error: `Main' has not been declared
Main.cc:20: error: `window' undeclared (first use this function)
Main.cc:20: error: `run' undeclared (first use this function)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
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
Main.cc:9:19: gtkmm.h: No such file or directory
Main.cc:10: error: expected namespace-name before ';' token
Main.cc:10: error: `<type error>' is not a namespace
Main.cc: In function `int main(int, char**)':
Main.cc:16: error: `Main' undeclared (first use this function)
Main.cc:16: error: (Each undeclared identifier is reported only once for each function it appears in.)
Main.cc:16: error: expected `;' before "kit"
Main.cc:18: error: `Window' undeclared (first use this function)
Main.cc:18: error: expected `;' before "window"
Main.cc:20: error: `Main' has not been declared
Main.cc:20: error: `window' undeclared (first use this function)
Main.cc:20: error: `run' undeclared (first use this function)
Code:
$ $PKG_CONFIG_PATH
sh: /D/PROGRA~1/DEVELO~1/GTK/lib/pkgconfig:D:\Programme\DevelopmentTools\GTK\lib\pkgconfig: No such file or directory
Code:
$ $PKG_CONFIG_PATH
sh: /D/PROGRA~1/DEVELO~1/GTK/lib/pkgconfig:D:\Programme\DevelopmentTools\GTK\lib\pkgconfig: No such file or directory
Code:
$ $PKG_CONFIG_PATH
sh: /D/PROGRA~1/DEVELO~1/GTK/lib/pkgconfig:D:\Programme\DevelopmentTools\GTK\lib\pkgconfig: No such file or directory
Ich verwende gtkmm unter Unix und dem emacs, IDEs sind nichts für mich
housefluffy schrieb:
Oki, dann liegt es anscheinend an den Versionen...
gtkmm-2.4 API ist aktuell, keine Sorge.
Zitat:
den Zucker brauch ich derzeit nicht, aber vielleicht einen Kaffee...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
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
Main.cc:9:19: gtkmm.h: No such file or directory
Main.cc:10: error: expected namespace-name before ';' token
Main.cc:10: error: `<type error>' is not a namespace
Main.cc: In function `int main(int, char**)':
Main.cc:16: error: `Main' undeclared (first use this function)
Main.cc:16: error: (Each undeclared identifier is reported only once for each function it appears in.)
Main.cc:16: error: expected `;' before "kit"
Main.cc:18: error: `Window' undeclared (first use this function)
Main.cc:18: error: expected `;' before "window"
Main.cc:20: error: `Main' has not been declared
Main.cc:20: error: `window' undeclared (first use this function)
Main.cc:20: error: `run' undeclared (first use this function)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
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
Main.cc:9:19: gtkmm.h: No such file or directory
Main.cc:10: error: expected namespace-name before ';' token
Main.cc:10: error: `<type error>' is not a namespace
Main.cc: In function `int main(int, char**)':
Main.cc:16: error: `Main' undeclared (first use this function)
Main.cc:16: error: (Each undeclared identifier is reported only once for each function it appears in.)
Main.cc:16: error: expected `;' before "kit"
Main.cc:18: error: `Window' undeclared (first use this function)
Main.cc:18: error: expected `;' before "window"
Main.cc:20: error: `Main' has not been declared
Main.cc:20: error: `window' undeclared (first use this function)
Main.cc:20: error: `run' undeclared (first use this function)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
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
Main.cc:9:19: gtkmm.h: No such file or directory
Main.cc:10: error: expected namespace-name before ';' token
Main.cc:10: error: `<type error>' is not a namespace
Main.cc: In function `int main(int, char**)':
Main.cc:16: error: `Main' undeclared (first use this function)
Main.cc:16: error: (Each undeclared identifier is reported only once for each function it appears in.)
Main.cc:16: error: expected `;' before "kit"
Main.cc:18: error: `Window' undeclared (first use this function)
Main.cc:18: error: expected `;' before "window"
Main.cc:20: error: `Main' has not been declared
Main.cc:20: error: `window' undeclared (first use this function)
Main.cc:20: error: `run' undeclared (first use this function)
Code:
$ $PKG_CONFIG_PATH
sh: /D/PROGRA~1/DEVELO~1/GTK/lib/pkgconfig:D:\Programme\DevelopmentTools\GTK\lib\pkgconfig: No such file or directory
Code:
$ $PKG_CONFIG_PATH
sh: /D/PROGRA~1/DEVELO~1/GTK/lib/pkgconfig:D:\Programme\DevelopmentTools\GTK\lib\pkgconfig: No such file or directory
Code:
$ $PKG_CONFIG_PATH
sh: /D/PROGRA~1/DEVELO~1/GTK/lib/pkgconfig:D:\Programme\DevelopmentTools\GTK\lib\pkgconfig: No such file or directory
Hm, okay, such mal nach der Datei gtkmm-2.4.pc und füg das Verzeichnis dann zur PKG_CONFIG_PATH Variable dazu (die Datei mit der Variable dürfte profile heißen und im MinGW Verzeichnis rumliegen).
Alternativer Plan: Du fügst alle Include-Verzeichnisse und Libs, gegen die gelinkt werden muss, von Hand zum Projekt dazu und machst dann halt ein Template draus, damit du das nicht jedes mal machen musst.
Zuletzt bearbeitet von GPC am 18:17:17 02.12.2006, insgesamt 1-mal bearbeitet
Nachdem ich es mit der MinGW Shell geschafft habe, war ich hartnäckig und habe meine Programmier-Umgebung unter NetBeans auch schon eingerichtet, voila -> es funktioniert.
...und ein Danke an das C/C++ Forum, das es überhaupt gibt und einen Newb - wie mich - aushaltet *hrhr*
Vorkompiliert findest dus vielleicht auf devpak.org
_________________ I have come here to chew memory and kick ass... and malloc() is returning a null pointer. This message has been ROT-13 encrypted twice for higher security. http://bluetiger.bauchlandung.org/
Guten Abend,
vor einigen Wochen habe ich mal versucht mit Dev-Cpp mit gtkmm solche Fenster zu programmieren etc.. Leider ohne Erfolg.
Habe den Versuch heute noch einmal aufgenommen.
Ich habe nun als erstes Mingw, dann GTK+, dann gtkmm und letztendlich dann Dev-Cpp installiert. Um dann die Templates zu haben, habe ich dann noch den Template installer von evilissimo benutzt. Aber auch das schon ohne Erfolg.
Da ich es anscheinend alleine niemals schaffe, bitte ich darum, dass jemand, der Zeit und Lust dazu hat, das mit mir nochmal Stück für Stück durchzugehen.
vor einigen Wochen habe ich mal versucht mit Dev-Cpp mit gtkmm solche Fenster zu programmieren etc.. Leider ohne Erfolg.
was genau war das Problem?
Zitat:
Ich habe nun als erstes Mingw, dann GTK+, dann gtkmm und letztendlich dann Dev-Cpp installiert. Um dann die Templates zu haben, habe ich dann noch den Template installer von evilissimo benutzt. Aber auch das schon ohne Erfolg.
Auch hier: Wo genau ist der Knackpunkt?
Hast du auch die Pfade gesetzt? Zum Einen musst du Dev-Cpp sagen, wo der MinGW liegt (außer er erkennt ihn von selbst) und zum Anderen will der MinGW wissen, woher er gtkmm nehmen soll.
gtk: gtk-win32-devel-2.6.10-rc1, full installation, automatisch zur autoexec.bat wurde angehängt:
SET GTK_BASEPATH=D:\PROGRA~2\GTK
SET INCLUDE=D:\Programmierung\GTK\INCLUDE;D:\Programmierung\GTK\INCLUDE\GTK-2.0;D:\Programmierung\GTK\INCLUDE\GLIB-2.0;
D:\Programmierung\GTK\INCLUDE\PANGO-1.0;D:\Programmierung\GTK\INCLUDE\ATK-1.0;D:\Programmierung\GTK\INCLUDE\GTKGLEXT-1.0;
D:\Programmierung\GTK\LIB\GTK-2.0\INCLUDE;D:\Programmierung\GTK\LIB\GLIB-2.0\INCLUDE;D:\Programmierung\GTK\LIB\GTKGLEXT-1.0\INCLUDE;
D:\Programmierung\GTK\INCLUDE\LIBGLADE-2.0;D:\Programmierung\GTK\INCLUDE\LIBXML2;
SET LIB=D:\Programmierung\GTK\LIB;
SET PATH=%GTK_BASEPATH%\bin;%PATH%
Bei der Installation gab es die möglichkeit, Gtk für Dev-Cpp zu registrieren. Habe das Kästchen deaktiviert, weil Dev-Cpp gar nicht installiert war.
->neustart->
gtkmm: gtkmm-devel-2.6.2-1, full installation
->neustart->
devcpp: devcpp-4.9.9.2_setup, full installation (unten ist eine kästchen "remove all previousconfiguration files", das habe ich nicht aktiviert)
->neustart->
starten von devcpp, konfiguration beim start:
sprache: deutsch
code completion feature: "Yes, I want to use this feature" aktiviert
Cache: "Yes, create the cache now" aktiviert
Versuch die drei im Template voreingestellten Dateien zu kompilieren:
D:\Programmierung\Dev-Cpp\G__~1.EXE Templates/mywindow.o: No such file or directory.
habe wohl etwas schnell geschrieben und nicht darauf geachtet, was ich schreibe und das die hälfte fehlt.
np.
Zitat:
Also zu erstmal benutze ich zur Zeit noch Win98Se
Okay, das begünstigt die Sache nicht gerade^^
Zitat:
devcpp: devcpp-4.9.9.2_setup, full installation (unten ist eine kästchen "remove all previousconfiguration files", das habe ich nicht aktiviert)
Ist das der, bei dem der Compiler mitgeliefert wird, oder der ohne?
Mir fällt grad auf, dass das Ding schon locker drei Jahre auf'm Buckel hat
Zitat:
Versuch die drei im Template voreingestellten Dateien zu kompilieren:
D:\Programmierung\Dev-Cpp\G__~1.EXE Templates/mywindow.o: No such file or directory.
Das Problem kann auch von Dev-Cpp her rühren, also ein bug sein. Den lese ich öfters, nicht nur bei gtkmm. Trotzdem merkwürdiger Fehler...
Zitat:
Als Compiler ist immer "default Compiler" eingestellt, ist das richtig oder muss ich da MinGW einstellen? Wenn ja, wie?
Wenn du die Version ohne Compiler installiert hast, ist es bereits der richtige (weil einzige ). Falls nicht, wählt Dev-Cpp den mitgelieferten Compiler aus, dem natürlich gtkmm usw. fehlt.
Zitat:
Weiß aber leider jetzt auch nicht genau welche Pfade du meinst, entschuldigung
Ich meinte das, was du zur autoexec.bat hinzugefügt hast (also die Include - und Lib Pfade).
Btw. Ich hab mal deinen Post editiert, wurde 'n bisschen breit, der Thread
Zitat:
devcpp: devcpp-4.9.9.2_setup, full installation (unten ist eine kästchen "remove all previousconfiguration files", das habe ich nicht aktiviert)
Ist das der, bei dem der Compiler mitgeliefert wird, oder der ohne?
Mir fällt grad auf, dass das Ding schon locker drei Jahre auf'm Buckel hat
Ich Döskopp
Genau das war der Fehler. Ich bin eigentlich immer davon ausgegangen, dass es die nonmingw datei gewesen wäre, bin mir aber auch sehr sicher, dass eine solche Setupdatei auf meinem Rechner mal ausgeführt wurde. Da es aber dort auch schon Probleme gab, hat sich da bei weiteren Downloads die falsche Setup eingeschummelt.
Vielen Dank, ohne dich wäre ich wohl nie darauf gekommen.
Also an Leute die manchmal genauso verwirrt sind, nehmt die devcpp-4.9.9.2_nomingw_setup.
4.9.9.2 ist auch schon etwas älter, aber eben die neuste Version. Wobei ich gerade irgentwas von 5.0 Beta gelesen habe. Naja
Nach der Installation der GTK+ Bibliotheken braucht man noch die GTKmm Bibliotheken die man auf:
http://www.pcpm.ucl.ac.be/~gustin/win32_ports/
bekommt. Klickt dort im Menü auf „gtkmm on win32“ und auf den Link unter
"Developer (Full) Environment"
(runtime + headers, import libraries, demo, doc).
Bin ich blind, oder ist es dort auf der Seite nicht so, wie du es beschreibst? Ich finde da bloß Binaries von GTKmm. Wie muss ich genau vorgehen?
zwar in der CMD eine ordentliche Ausgabe gibt, unter cygwin erhalte ich als Antwort jedoch, dass gtkmm-2.4 nicht gefunden wurde, und ich gtkmm-2.4.pc zur PKG_CONFIG_PATH Variable hinzufügen soll. Das habe ich aber bereits getan!
wollte mir das eigentlich über's Wochenende ansehen, hab's aber leider verpennt.
Setz am Dienstag noch mal 'n Post hierrein oder 'ne E-Mail an mich ab, falls ich's wieder vergesse.
als Compiler-Befehl schreiben, wenn dieser Befehl doch gar nicht geht!
Ja, also diesen Befehl kannst du z.B. in die msys oder cygwin Shell eintippen. Die arbeitet sehr gut mit MinGW zusammen. pkg-config übernimmt im Prinzip für dich das Angeben der Paktete, die zum Linken benötigt werden.
zwar in der CMD eine ordentliche Ausgabe gibt, unter cygwin erhalte ich als Antwort jedoch, dass gtkmm-2.4 nicht gefunden wurde, und ich gtkmm-2.4.pc zur PKG_CONFIG_PATH Variable hinzufügen soll. Das habe ich aber bereits getan!
Zeig mal bitte deine profile-Datei von cygwin.
Noch was: Dev-Cpp ist ein ziemlich verbuggtes Tool, weshalb man oft damit Probleme hat. Wenn du willst bzw. kannst, empfehle ich dir den Umstieg auf das Visual Studio 2005 Express Edition. In den FAQ des Andere GUIs Forum gibt es ein Tutorial, wie man GTK+ und gtkmm damit zum Laufen bringt.
# Here is how HOME is set, in order of priority, when starting from Windows
# 1) From existing HOME in the Windows environment, translated to a Posix path
# 2) from /etc/passwd, if there is an entry with a non empty directory field
# 3) from HOMEDRIVE/HOMEPATH
# 4) / (root)
# If the home directory doesn't exist, create it.
if [ ! -d "${HOME}" ]; then
mkdir -p "${HOME}"
echo "Copying skeleton files."
echo "These files are for the user to personalise"
echo "their cygwin experience."
echo
echo "These will never be overwritten."
echo
cd /etc/skel
/bin/find . -type f | while read f; do
fDest=`echo ${f} | sed -e 's/^\.//g'`
if [ ! -e "${HOME}${fDest}" -a ! -L "${HOME}${fDest}" ]; then
/usr/bin/install -D -p -v "${f}" "${HOME}/${fDest}"
fi
done
fi
chmod 1777 /tmp 2>/dev/null
# Default to unix make mode
MAKE_MODE=unix
export MAKE_MODE
# It is recommended that cvs uses ssh for it's remote shell environment
CVS_RSH=/bin/ssh
export CVS_RSH
# Shell dependent settings
case "`echo "_$0" | /usr/bin/tr '[:upper:]' '[:lower:]' | /usr/bin/sed -e 's/^_//'`" in
bash | -bash | */bash | \
bash.exe | -bash.exe | */bash.exe )
# Set a HOSTNAME variable
HOSTNAME=`hostname`
export HOSTNAME
# Set a default prompt of: user@host and current_directory
PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '
;;
ksh* | -ksh* | */ksh* | \
ksh*.exe | -ksh*.exe | */ksh*.exe )
# Set a HOSTNAME variable
typeset -l HOSTNAME
# Set a default prompt of: user@host and current_directory
PS1='^[]0;${PWD}^G
^[[32m${USER}@${HOSTNAME} ^[[33m${PWD}^[[0m
$ '
;;
zsh* | -zsh* | */zsh* | \
zsh*.exe | -zsh*.exe | */zsh*.exe )
# Set a default prompt of: user@host, a command counter, and current_directory
PS1='(%n@%m)[%h] %~ %% '
# Set SHELL if not set
if [ ! -z "${ZSH_NAME}" -a -z "${SHELL}" ]; then
SHELL="/bin/zsh"
export SHELL
fi
;;
sh | -sh | */sh | \
sh.exe | -sh.exe | */sh.exe )
# Set a simple prompt
PS1='$ '
;;
* )
# Sorry, this shell has no defaults in /etc/profile,
# feel free to add your own.
# If you have some recommendations for what these defaults
# should be, please contact cygwin@cygwin.com with the
# shell details and what you would like added.
# Thanks
PS1='$ '
;;
esac
export PS1
# Run all of the profile.d scripts
# Note that these are supplied by separate packages
# Ascending alphanumerical order enforced
if [ -d "/etc/profile.d" ]; then
while read f; do
if [ -f "${f}" ]; then
. "${f}"
fi
done <<- EOF
`/bin/find -L /etc/profile.d -type f -iname '*.sh' -or -iname '*.zsh' | LC_ALL=C sort`
EOF
fi
# Uncomment to use the terminal colours set in DIR_COLOR
# eval "`dircolors -b /etc/DIR_COLORS`"
# Default to removing the write permission for group and other
# (files normally created with mode 777 become 755; files created with
# mode 666 become 644)
umask 022
# Define default printer
PRINTER=""
case `uname -s` in
CYGWIN_NT-*)
PRINTER="`regtool -q get '\user\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device' | sed 's/,.*$//'`"
;;
CYGWIN_9?-*)
PRINTER="`regtool -q get '\config\System\CurrentControlSet\Control\Print\Printers\Default'`"
;;
esac
export PRINTER
# Make sure we start in home unless invoked by CHERE
if [ ! -z "${CHERE_INVOKING}" ]; then
unset CHERE_INVOKING
else
cd "${HOME}"
fi
# Check to see if mkpasswd/mkgroup needs to be run try and cut down the emails
# about this on the lists!
# If this message keeps appearing and you are sure it's a mistake (ie, don't
# email about it!), comment out the test below.
case `id -ng` in
mkpasswd )
echo "Your group is currently \"mkpasswd\". This indicates that"
echo "the /etc/passwd (and possibly /etc/group) files should be rebuilt."
echo "See the man pages for mkpasswd and mkgroup then, for example, run"
echo "mkpasswd -l [-d] > /etc/passwd"
echo "mkgroup -l [-d] > /etc/group"
echo "Note that the -d switch is necessary for domain users."
;;
mkgroup )
echo "Your group is currently \"mkgroup\". This indicates that"
echo "the /etc/group (and possibly /etc/passwd) files should be rebuilt."
echo "See the man pages for mkpasswd and mkgroup then, for example, run"
echo "mkpasswd -l [-d] > /etc/passwd"
echo "mkgroup -l [-d] > /etc/group"
echo "Note that the -d switch is necessary for domain users."
;;
mkgroup_l_d )
echo "Your group name is currently \"mkgroup_l_d\". This indicates that not"
echo "all domain users and groups are listed in the /etc/passwd and"
echo "/etc/group files."
echo "See the man pages for mkpasswd and mkgroup then, for example, run"
echo "mkpasswd -l -d > /etc/passwd"
echo "mkgroup -l -d > /etc/group"
echo
echo "This message is only displayed once (unless you recreate /etc/group)"
echo "and can be safely ignored."
# Here is how HOME is set, in order of priority, when starting from Windows
# 1) From existing HOME in the Windows environment, translated to a Posix path
# 2) from /etc/passwd, if there is an entry with a non empty directory field
# 3) from HOMEDRIVE/HOMEPATH
# 4) / (root)
# If the home directory doesn't exist, create it.
if [ ! -d "${HOME}" ]; then
mkdir -p "${HOME}"
echo "Copying skeleton files."
echo "These files are for the user to personalise"
echo "their cygwin experience."
echo
echo "These will never be overwritten."
echo
cd /etc/skel
/bin/find . -type f | while read f; do
fDest=`echo ${f} | sed -e 's/^\.//g'`
if [ ! -e "${HOME}${fDest}" -a ! -L "${HOME}${fDest}" ]; then
/usr/bin/install -D -p -v "${f}" "${HOME}/${fDest}"
fi
done
fi
chmod 1777 /tmp 2>/dev/null
# Default to unix make mode
MAKE_MODE=unix
export MAKE_MODE
# It is recommended that cvs uses ssh for it's remote shell environment
CVS_RSH=/bin/ssh
export CVS_RSH
# Shell dependent settings
case "`echo "_$0" | /usr/bin/tr '[:upper:]' '[:lower:]' | /usr/bin/sed -e 's/^_//'`" in
bash | -bash | */bash | \
bash.exe | -bash.exe | */bash.exe )
# Set a HOSTNAME variable
HOSTNAME=`hostname`
export HOSTNAME
# Set a default prompt of: user@host and current_directory
PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '
;;
ksh* | -ksh* | */ksh* | \
ksh*.exe | -ksh*.exe | */ksh*.exe )
# Set a HOSTNAME variable
typeset -l HOSTNAME
# Set a default prompt of: user@host and current_directory
PS1='^[]0;${PWD}^G
^[[32m${USER}@${HOSTNAME} ^[[33m${PWD}^[[0m
$ '
;;
zsh* | -zsh* | */zsh* | \
zsh*.exe | -zsh*.exe | */zsh*.exe )
# Set a default prompt of: user@host, a command counter, and current_directory
PS1='(%n@%m)[%h] %~ %% '
# Set SHELL if not set
if [ ! -z "${ZSH_NAME}" -a -z "${SHELL}" ]; then
SHELL="/bin/zsh"
export SHELL
fi
;;
sh | -sh | */sh | \
sh.exe | -sh.exe | */sh.exe )
# Set a simple prompt
PS1='$ '
;;
* )
# Sorry, this shell has no defaults in /etc/profile,
# feel free to add your own.
# If you have some recommendations for what these defaults
# should be, please contact cygwin@cygwin.com with the
# shell details and what you would like added.
# Thanks
PS1='$ '
;;
esac
export PS1
# Run all of the profile.d scripts
# Note that these are supplied by separate packages
# Ascending alphanumerical order enforced
if [ -d "/etc/profile.d" ]; then
while read f; do
if [ -f "${f}" ]; then
. "${f}"
fi
done <<- EOF
`/bin/find -L /etc/profile.d -type f -iname '*.sh' -or -iname '*.zsh' | LC_ALL=C sort`
EOF
fi
# Uncomment to use the terminal colours set in DIR_COLOR
# eval "`dircolors -b /etc/DIR_COLORS`"
# Default to removing the write permission for group and other
# (files normally created with mode 777 become 755; files created with
# mode 666 become 644)
umask 022
# Define default printer
PRINTER=""
case `uname -s` in
CYGWIN_NT-*)
PRINTER="`regtool -q get '\user\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device' | sed 's/,.*$//'`"
;;
CYGWIN_9?-*)
PRINTER="`regtool -q get '\config\System\CurrentControlSet\Control\Print\Printers\Default'`"
;;
esac
export PRINTER
# Make sure we start in home unless invoked by CHERE
if [ ! -z "${CHERE_INVOKING}" ]; then
unset CHERE_INVOKING
else
cd "${HOME}"
fi
# Check to see if mkpasswd/mkgroup needs to be run try and cut down the emails
# about this on the lists!
# If this message keeps appearing and you are sure it's a mistake (ie, don't
# email about it!), comment out the test below.
case `id -ng` in
mkpasswd )
echo "Your group is currently \"mkpasswd\". This indicates that"
echo "the /etc/passwd (and possibly /etc/group) files should be rebuilt."
echo "See the man pages for mkpasswd and mkgroup then, for example, run"
echo "mkpasswd -l [-d] > /etc/passwd"
echo "mkgroup -l [-d] > /etc/group"
echo "Note that the -d switch is necessary for domain users."
;;
mkgroup )
echo "Your group is currently \"mkgroup\". This indicates that"
echo "the /etc/group (and possibly /etc/passwd) files should be rebuilt."
echo "See the man pages for mkpasswd and mkgroup then, for example, run"
echo "mkpasswd -l [-d] > /etc/passwd"
echo "mkgroup -l [-d] > /etc/group"
echo "Note that the -d switch is necessary for domain users."
;;
mkgroup_l_d )
echo "Your group name is currently \"mkgroup_l_d\". This indicates that not"
echo "all domain users and groups are listed in the /etc/passwd and"
echo "/etc/group files."
echo "See the man pages for mkpasswd and mkgroup then, for example, run"
echo "mkpasswd -l -d > /etc/passwd"
echo "mkgroup -l -d > /etc/group"
echo
echo "This message is only displayed once (unless you recreate /etc/group)"
echo "and can be safely ignored."
# Here is how HOME is set, in order of priority, when starting from Windows
# 1) From existing HOME in the Windows environment, translated to a Posix path
# 2) from /etc/passwd, if there is an entry with a non empty directory field
# 3) from HOMEDRIVE/HOMEPATH
# 4) / (root)
# If the home directory doesn't exist, create it.
if [ ! -d "${HOME}" ]; then
mkdir -p "${HOME}"
echo "Copying skeleton files."
echo "These files are for the user to personalise"
echo "their cygwin experience."
echo
echo "These will never be overwritten."
echo
cd /etc/skel
/bin/find . -type f | while read f; do
fDest=`echo ${f} | sed -e 's/^\.//g'`
if [ ! -e "${HOME}${fDest}" -a ! -L "${HOME}${fDest}" ]; then
/usr/bin/install -D -p -v "${f}" "${HOME}/${fDest}"
fi
done
fi
chmod 1777 /tmp 2>/dev/null
# Default to unix make mode
MAKE_MODE=unix
export MAKE_MODE
# It is recommended that cvs uses ssh for it's remote shell environment
CVS_RSH=/bin/ssh
export CVS_RSH
# Shell dependent settings
case "`echo "_$0" | /usr/bin/tr '[:upper:]' '[:lower:]' | /usr/bin/sed -e 's/^_//'`" in
bash | -bash | */bash | \
bash.exe | -bash.exe | */bash.exe )
# Set a HOSTNAME variable
HOSTNAME=`hostname`
export HOSTNAME
# Set a default prompt of: user@host and current_directory
PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '
;;
ksh* | -ksh* | */ksh* | \
ksh*.exe | -ksh*.exe | */ksh*.exe )
# Set a HOSTNAME variable
typeset -l HOSTNAME
# Set a default prompt of: user@host and current_directory
PS1='^[]0;${PWD}^G
^[[32m${USER}@${HOSTNAME} ^[[33m${PWD}^[[0m
$ '
;;
zsh* | -zsh* | */zsh* | \
zsh*.exe | -zsh*.exe | */zsh*.exe )
# Set a default prompt of: user@host, a command counter, and current_directory
PS1='(%n@%m)[%h] %~ %% '
# Set SHELL if not set
if [ ! -z "${ZSH_NAME}" -a -z "${SHELL}" ]; then
SHELL="/bin/zsh"
export SHELL
fi
;;
sh | -sh | */sh | \
sh.exe | -sh.exe | */sh.exe )
# Set a simple prompt
PS1='$ '
;;
* )
# Sorry, this shell has no defaults in /etc/profile,
# feel free to add your own.
# If you have some recommendations for what these defaults
# should be, please contact cygwin@cygwin.com with the
# shell details and what you would like added.
# Thanks
PS1='$ '
;;
esac
export PS1
# Run all of the profile.d scripts
# Note that these are supplied by separate packages
# Ascending alphanumerical order enforced
if [ -d "/etc/profile.d" ]; then
while read f; do
if [ -f "${f}" ]; then
. "${f}"
fi
done <<- EOF
`/bin/find -L /etc/profile.d -type f -iname '*.sh' -or -iname '*.zsh' | LC_ALL=C sort`
EOF
fi
# Uncomment to use the terminal colours set in DIR_COLOR
# eval "`dircolors -b /etc/DIR_COLORS`"
# Default to removing the write permission for group and other
# (files normally created with mode 777 become 755; files created with
# mode 666 become 644)
umask 022
# Define default printer
PRINTER=""
case `uname -s` in
CYGWIN_NT-*)
PRINTER="`regtool -q get '\user\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device' | sed 's/,.*$//'`"
;;
CYGWIN_9?-*)
PRINTER="`regtool -q get '\config\System\CurrentControlSet\Control\Print\Printers\Default'`"
;;
esac
export PRINTER
# Make sure we start in home unless invoked by CHERE
if [ ! -z "${CHERE_INVOKING}" ]; then
unset CHERE_INVOKING
else
cd "${HOME}"
fi
# Check to see if mkpasswd/mkgroup needs to be run try and cut down the emails
# about this on the lists!
# If this message keeps appearing and you are sure it's a mistake (ie, don't
# email about it!), comment out the test below.
case `id -ng` in
mkpasswd )
echo "Your group is currently \"mkpasswd\". This indicates that"
echo "the /etc/passwd (and possibly /etc/group) files should be rebuilt."
echo "See the man pages for mkpasswd and mkgroup then, for example, run"
echo "mkpasswd -l [-d] > /etc/passwd"
echo "mkgroup -l [-d] > /etc/group"
echo "Note that the -d switch is necessary for domain users."
;;
mkgroup )
echo "Your group is currently \"mkgroup\". This indicates that"
echo "the /etc/group (and possibly /etc/passwd) files should be rebuilt."
echo "See the man pages for mkpasswd and mkgroup then, for example, run"
echo "mkpasswd -l [-d] > /etc/passwd"
echo "mkgroup -l [-d] > /etc/group"
echo "Note that the -d switch is necessary for domain users."
;;
mkgroup_l_d )
echo "Your group name is currently \"mkgroup_l_d\". This indicates that not"
echo "all domain users and groups are listed in the /etc/passwd and"
echo "/etc/group files."
echo "See the man pages for mkpasswd and mkgroup then, for example, run"
echo "mkpasswd -l -d > /etc/passwd"
echo "mkgroup -l -d > /etc/group"
echo
echo "This message is only displayed once (unless you recreate /etc/group)"
echo "and can be safely ignored."
So, ziemlich viel. Hoffe du kannst was damit anfangen.
Danke
P.S.: Der Sinn des Tutorials aus der FAQ erschließt sich mir irgendwie nicht so ganz. Ich habe auf den gtkmm Seiten auch etwas über das Benutzen von gtkmm mit Visual C++ gefunden und werde mir das mal anschauen. Es wäre mir aber lieber, den gcc weiterhin verwenden zu können, zumal ich von Visual C++ nicht so angetan bin und das Einrichten von gtkmm für Visual C++ auch recht aufwändig aussieht.
So, ziemlich viel. Hoffe du kannst was damit anfangen.
Jo, knall mal
export PKG_CONFIG_PATH = /usr/local/lib/pkgconfig
Da rein. Bzw. ersetze den Pfad zu pkgconfig, wohin du ihn installiert hast.
Ansonsten: Hast du eine .bashrc in deinem cygwin home-Verzeichnis?
Zitat:
P.S.: Der Sinn des Tutorials aus der FAQ erschließt sich mir irgendwie nicht so ganz.
Äh, ich war halt zu faul, ständig Fragen zu "Wie benutze ich gtkmm mit VC++" zu beantworten. Daher das tut. Komischerweise kommen ungefähr seit dem Zeitpunkt keine Fragen mehr, wie man GTK+ bzw. gtkmm unter Win mit dem VS einrichtet... entweder nach dem Tut ist alles klar oder alle sind verstört/verängstigt und nehmen doch lieber die WinAPI oder die .NET WinForms
Zitat:
[...] und das Einrichten von gtkmm für Visual C++ auch recht aufwändig aussieht.
Wie man sieht ist die Datei da. Langsam weiß ich echt nicht mehr weiter. Es muss doch irgendwie machbar sein, dieses verfluchte GTKmm unter Windows benutzen zu können .
ich würde dir ja gerne helfen, kann aber momentan nicht (siehe hier ). Sorry, aber auf die schnelle kann ich ich dein Problem so nicht lösen.
Was mir auffällt: Du hast den Verzeichnisinhalt von pangomm gelistet, aber wir bräuchten eigentlich den von cairomm.
Hm, ja. Daran liegt's also nicht.
Okay, also Ferndiagnoe funzt hier nicht. Ich muss das an meinem eigenen Rechner testen...sobald hier wieder was geht. Könnte also etwas dauern.
Kompilieren eigentlich normale GTK+ Programme? Das haste ja schließlich auch installiert
Zuletzt bearbeitet von GPC am 20:23:26 19.03.2007, insgesamt 1-mal bearbeitet
Ich habe mir jetzt MSYS installiert und damit geht's ohne Probleme. Es ist zwar nicht ganz so komfortabel wie mit einer IDE aber besser als nichts.
Trotzdem nochmal vielen Dank für die Hilfe.
kann mir jemand verraten wie das unter code::blocks funktioniert?!
weiß nicht wie man das dort einbindet. bitte helft mir
komm ohne euch keinen schritt weiter -
habe gtk++ und gtkmm in c:\programme\gtk installiert
aber wie mache ich code::blocks jetzt klar wo die gtkmm.h ist?
bzw wenn ich den include einstelle will er immer wieder andere dateien.
zum verrückt werden!!!!!!!
Zuletzt bearbeitet von Phenex am 02:06:34 12.05.2007, insgesamt 2-mal bearbeitet
kann mir jemand verraten wie das unter code::blocks funktioniert?!
weiß nicht wie man das dort einbindet. bitte helft mir
komm ohne euch keinen schritt weiter -
habe gtk++ und gtkmm in c:\programme\gtk installiert
aber wie mache ich code::blocks jetzt klar wo die gtkmm.h ist?
bzw wenn ich den include einstelle will er immer wieder andere dateien.
zum verrückt werden!!!!!!!
Na Toll, merke gerade das die Datei nicht mehr aufm Server ist, habe auch meine Platte durchsucht und nichts zu finden ...
Michael hat sie aber vllt noch, wenn er mal online ist frag ich ihn und lade es neu hoch
_________________ Um C++ zu beherrschen muss man schon for( ;; ) fragen ob er genug Zeit für einen hat ...
so... nach 4,5 stunden habe ich das teil jetzt endlich installiert bekommen, jetzt stehe ich aber vor dem nächsten problem und finde schon wieder seit 1,5h keine lösung *grml*
und zwar bekomm ich beim kompilieren immer den fehler, dass die .exe nicht erstellt werden könnte...im kompilier log steht folgendes:
../test/mywindow.o(.text+0x1df2):mywindow.cpp: multiple definition of `main'
../test/main.o(.text+0x100):main.cpp: first defined here
collect2: ld returned 1 exit status
make.exe: *** [Projekt2.exe] Error 1
Ausführung beendet
ich hoff es kann mir jemand helfen, bin relativ ratlos und auf dem gebiet dazu auch noch verdammt neu....
Sorry, wenn ich den Beitrag nochmal hochschiebe...
Ich such den Installer für die DevCpp Projekttemplates, von denen im ursprünglichen Beitrag die Rede ist. Ich werde stets ins Nirvana geführt...
Hat den jmd von euch noch? Könnte den jemand irgendwo hochladen (oder per Email schicken, das geht natürlich auch..)
Ja leider hab ich mein Hostingspace aufgeben müssen wo diese Dateien drauf waren. Ich habe irgendwo noch ein backup davon glaub ich. Aber sicher bin ich mir da jetzt nicht.
Ich schaue heute abend mal.
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.