Probleme mit GTK+ Beispielen

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
forumnewbie
Beiträge: 80
Registriert: Di Jan 15, 2013 9:02 pm

Probleme mit GTK+ Beispielen

Beitrag von forumnewbie » Fr Mär 14, 2014 6:53 pm

Hallo,

ich habe GTK+ 2.24 all-in-one bundle von der Webseite gtk(punkt)org heruntergeladen und in das Verzeichnis C:/OPT/GTK entpackt.

Danach habe ich nach diesem Tutorial http://www.proggen.org/doku.php?id=c:tu ... sualstudio alle Header-Dateien und Lib-Dateien richtig verlinkt bzw. einfach aus dem Tutorial die Pfade kopiert. Visual Studio 2012 Express konnte die benötigten Dateien finden. Es gibt jedoch bei einem Parameter einen Fehler (Quellcode habe ich aus dem Tutorial genommen):

Der "GTK_DIALOG_MODAL" Parameter ist rot markiert und als Fehlermeldung erhalte ich:
'gtk_message_dialog_new': Konvertierung des Parameters 2 von 'int' in 'GtkDialogFlags' nicht möglich
Das Argument vom Typ ""int"" ist mit dem Parameter vom Typ ""GtkDialogFlags"" inkompatibel.
Wenn ich diesen Parameter lösche, dann lässt sich das Projekt starten, jedoch erhalte ich einen Systemfehler, der mir mitteilt, dass libgtk-win32-2.0-0.dll auf meinem Computer fehlt.

Danach habe ich ein anderes sehr kleines Beispiel genommen, jedoch erhalte ich eine ähnliche Fehlermeldung:

Code: Alles auswählen

#include <gtk/gtk.h>

int main(int argc, char **argv)
{
  GtkWidget *Fenster;
  gtk_init(&argc, &argv);
  Fenster = gtk_window_new(0);
  gtk_widget_show(Fenster);
  gtk_main();
  return 0;
}
'gtk_window_new': Konvertierung des Parameters 1 von 'int' in 'GtkWindowType'
Das Argument vom Typ ""int"" ist mit dem Parameter vom Typ ""GtkWindowType"" inkompatibel.
Was mache ich falsch bzw. was muss ich noch einrichten oder einstellen?

Danke!

forumnewbie
Beiträge: 80
Registriert: Di Jan 15, 2013 9:02 pm

Re: Probleme mit GTK+ Beispielen

Beitrag von forumnewbie » Sa Mär 15, 2014 2:24 pm

Hi nochmal,

ich habe jetzt das anders nach einem anderen Tutorial konfiguriert (Google: "How to configure gtk on Visual studio 2010" - erster Treffer stackoverflow(punkt)com ).

Und sein Beispiel läuft einwandfrei.
Quellcode:

Code: Alles auswählen

#include <gtk-2.0\gtk\gtk.h>

int main(int argc, char* argv[])
{
    gtk_init(&argc, &argv);

    GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_set_usize(window, 300, 200);

    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);   
    gtk_window_set_title(GTK_WINDOW(window), "GTK+ with VS2010");

    gtk_widget_show(window);     

    gtk_main();   
    return 0;
}
Versuche ich jedoch das Beispiel http://www.proggen.org/doku.php?id=c:tu ... sourcecode aus dem Tutorium zu nehmen oder mein anderes kleines Beispiel aus einem Buch, dann erhalte ich die selbe Fehlermeldungen wie oben.


EDIT:
Ok, wenn ich bei meinem kleinem Beispiel statt 0 -> GTK_WINDOW_TOPLEVEL schreibe, dann funktioniert alles.

Code: Alles auswählen

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
Aber es funktioniert nur mit der Konfiguration, die auf der Webseite stackoverflow steht. Er hat das Projekt anders konfiguriert. Die Systemvariablen müssen nicht gesetzt werden, da man einfach selbst den genauen Pfad angeben kann. Also ab folgendem Schritt kann gleich gemacht werden: "Now we move on to Visual Studio 2010 and create a new project."

forumnewbie
Beiträge: 80
Registriert: Di Jan 15, 2013 9:02 pm

Anleitung auf Deutsch

Beitrag von forumnewbie » Sa Mär 15, 2014 3:37 pm

Ich schreib dann am besten gleich eine Anleitung hier auf Deutsch (getestet mit VS 2012 Express). Vielleicht wird jemand danach auch suchen:

Schritt 1: GTK+ 2.24 (bzw aktuelle 32 bit Version) all-in-one bundle von der Webseite gtk(punkt)org heruntergeladen und in ein neues Verzeichnis z.B. C:/OPT/GTK entpacken.

Schritt 2: Datei -> Neues Projekt -> Visual C++ -> Win32 -> Win32-Konsolenanwendung -> Weiter -> Windows-Anwendung + Leeres Projekt -> Fertig stellen.

Schritt 3: Windows-Konsole öffnen (Windows-> Programme/Dateien durchsuchen -> "cmd" eingeben und mit Enter bestätigen")
Mit "cd"-Befehl (change directory) in das Verzeichnis GTK\BIN navigieren. Z.B.

Code: Alles auswählen

C:\OPT\GTK\BIN
Aus diesem Verzeichnis folgendes in der Konsole eingeben:

Code: Alles auswählen

pkg-config --cflags gtk+-2.0 --msvc-syntax > compilerflags.txt
und

Code: Alles auswählen

pkg-config --libs gtk+-2.0 --msvc-syntax > linkerflags.txt
Damit erstellen wir zwei Textdateien im aktuellen GTK\BIN Verzeichnis, in denen Optionen stehen, die unsere Entwicklungsumgebung (Compiler und Linker) benötigt. Sonst findet unsere Entwicklungsumgebung die benötigten GTK Bibliotheken nicht und markiert alle unbekannten Funktionen rot.

Schritt 4: Rechtsklick auf unser Projekt im Projektmappen-Explorer -> Eigenschaften oder über das Menü oben auf Projekt -> Eigenschaften gehen.
Jetzt auf Konfigurationseigenschaften -> VC++-Verzeichnisse -> Includeverzeichnisse -> Bearbeiten und folgende drei Verzeichnisse eintragen bzw einfach auswählen und mit OK berstätigen:

Code: Alles auswählen

C:\OPT\GTK\lib\gtk-2.0\include
C:\OPT\GTK\lib\glib-2.0\include
C:\OPT\GTK\include
Und bei ->Bibliothekverzeichnisse im selben Fenster folgendes noch eintragen bzw. auswählen:

Code: Alles auswählen

C:\OPT\GTK\lib
Schritt 5: Jetzt im linken Fenster auf Linker -> System gehen und bei SubSystem -> Windows (/SUBSYSTEM:WINDOWS) auswählen (bzw. prüfen ob ausgewählt ist) und mit Übernehmen speichern.

Schritt 6: Jetzt den Inhalt der Datei compilerflags.txt - ohne die Option -mms-bitfields unter C/C++ -> Befehlszeile -> Weiter Optionen eintragen und auf übernehmen klicken.
Inhalt meiner Datei compilerflags.txt (ohne :-mms-bitfields)

Code: Alles auswählen

-IC:/OPT/GTK/include/gtk-2.0 -IC:/OPT/GTK/lib/gtk-2.0/include -IC:/OPT/GTK/include/atk-1.0 -IC:/OPT/GTK/include/cairo -IC:/OPT/GTK/include/gdk-pixbuf-2.0 -IC:/OPT/GTK/include/pango-1.0 -IC:/OPT/GTK/include/glib-2.0 -IC:/OPT/GTK/lib/glib-2.0/include -IC:/OPT/GTK/include -IC:/OPT/GTK/include/freetype2 -IC:/OPT/GTK/include/libpng14  
Schritt 7: Jetzt den kompletten Inhalt der Datei linkerflags.txt mit einer zusätzlichen Option /ENTRY:mainCRTStartup für die main-Funktion unter Linker -> Befehlszeile -> Weiter Optionen eintragen und auf Übernehmen klicken.
Inhalt meiner Datei linkerflags.txt (mit der Zusatzoption /ENTRY:mainCRTStartup)

Code: Alles auswählen

/libpath:C:/OPT/GTK/lib gtk-win32-2.0.lib gdk-win32-2.0.lib atk-1.0.lib gio-2.0.lib pangowin32-1.0.lib gdi32.lib pangocairo-1.0.lib gdk_pixbuf-2.0.lib pango-1.0.lib cairo.lib gobject-2.0.lib gmodule-2.0.lib gthread-2.0.lib glib-2.0.lib intl.lib  
/ENTRY:mainCRTStartup 
Schritt 8: Wenn alles eingetragen und gespeichert ist, können wir das Eigenschaften-Fenster endlich schließen und im Projektmappen-Explorer unter Quelldateien eine main.cpp Datei für unser GTK-Projekt erstellen.
Rechtklick auf Quelldateien -> Hinzufügen -> Neues Element -> C++ Datei (.cpp) -> z.B. main.cpp -> hinzufügen.
Und z.B. mit diesem Quellcode testen, ob alles funktioniert:

Code: Alles auswählen

#include <gtk/gtk.h>

int main(int argc, char **argv)
{
  GtkWidget *Fenster;
  gtk_init(&argc, &argv);
  Fenster = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_widget_show(Fenster);
  gtk_main();
  return 0;
}
Fertig.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Probleme mit GTK+ Beispielen

Beitrag von Xin » Sa Mär 15, 2014 9:07 pm

Subsystem Windows sagt mir nix, das brauchte ich unter VS2010 nicht einzustellen - ich habe auch kein Studio 2012. Das sollte ich mal ändern, das blöde ist, dass ich nur eine 120GB SSD habe und da ist Linux und Windows drauf... Ich glaube VS2012 würde da derzeit nichtmals mehr drauf passen. Vielleicht mal auf einer externen installieren und Deine Anleitung bebildert ins Wiki überführen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

forumnewbie
Beiträge: 80
Registriert: Di Jan 15, 2013 9:02 pm

Re: Probleme mit GTK+ Beispielen

Beitrag von forumnewbie » So Mär 16, 2014 3:11 pm

Dann am besten gleich die neueste 2013 Version nehmen, weil sie C99 Standard endlich unterstützt.

Ich würde aber eure Anleitung nicht löschen - vielleicht habe irgendwas vergessen oder nicht richtig gemacht.
Den Paramater GTK_DIALOG_MODAL markieren meine IDEs 2012 und 2013 auch rot. Wenn ich das aber entferne (scheint ja optional zu sein?), dann kann ich das GTK Programm mit "meiner" Konfiguration problemlos starten. Es wird keine dll-Datei in diesem Fall vermisst.

Also 2012 und 2013 funktionieren mit "meiner" Konfiguration bis jetzt problemlos, die ich auf einer Webseite gefunden habe. Der Vorteil von dieser Konfiguration ist, dass man den Inhalt der Dateien mit den ganzen Optionen/Pfaden einfach kopieren kann. Man muss das nicht einzeln anpassen.

Antworten