gtk init check Gobject fehler



  • Funktioniert denn

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

    ?



  • leider Nein da bekomme ich die gleiche fehlermeldung



  • Nicses schrieb:

    leider Nein da bekomme ich die gleiche fehlermeldung

    Dann zeige doch mal Deinen Code



  • das wird nur leider nicht viel bringen da aber trotzdem

    #include <gtk/gtk.h>
    
    int main(int argc, char *argv[])
    {
    gtk_init(NULL,NULL);
    }
    

    Bauen tut er ja alles das ist nicht das Problem aber zur laufzeit bricht er bei gtk_init ab und beendet das Programm. Er kann also kein Fenster erstellen. Aber ich weiß nicht warum.

    entwickelt und getestet wird unter openSuse. GTK ist installiert.



  • Nicses schrieb:

    Bauen tut er ja alles das ist nicht das Problem aber zur laufzeit bricht er bei gtk_init ab und beendet das Programm. Er kann also kein Fenster erstellen. Aber ich weiß nicht warum.

    entwickelt und getestet wird unter openSuse. GTK ist installiert.

    Ich bezweifle mal, dass der Fehler bei gtk_init auftritt. Zu diesem Zeitpunkt interessiert sich GTK+ noch gar nicht für Signale, um eine solche Meldung zu generieren:

    (process:19337): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion `G_TYPE_CHECK_INSTANCE (instance)' faile
    

    Da ich leider keine Glaskugel habe und auch nicht Kaffeesatzlesen kann (ich bin Teetrinker), kann Dir hier nur jemand weiterhelfen, wenn Du zumindest Deine komplette "main" zeigst...



  • Ich bezweifle mal, dass der Fehler bei gtk_init auftritt.

    Doch genau das ist der fall. Mehr wird momentan nicht von meiner Main gemacht da das programm nach dem gtk_init abbricht (Das habe ich durch denn Debugger herausgefunden).

    Ich verstehe die Fehlermeldung ja auch nicht deshalb suche ich hilfe. Aber mehr wird von meiner Main gar nicht ausgeführt. Leider sonst wäre ich auch schlauer. Ich weiß leider auch nicht wo ich suchen muss.

    Nicses



  • Nicses schrieb:

    Doch genau das ist der fall. Mehr wird momentan nicht von meiner Main gemacht da das programm nach dem gtk_init abbricht
    Nicses

    Ich habe hier ein triviales Zählprogramm für GTK+. Schau Dir an, wo gtk_init() aufgerufen wird, und wo die Signale initialisiert werden:

    #include <stdlib.h>
    #include <string.h>
    #include <gtk/gtk.h>
    //
    typedef struct _WorkFields
    {
    	GtkWidget    	*window1;	
    //
    	GtkWidget      	*label1;	
    //
    	gint			counter; 
    } WorkFields;
    //
    gboolean time_handler(WorkFields *work) 
    {
    	gchar			val[64];
    //
    	if (work->window1 == NULL) return FALSE;
    
    	work->counter++; 
    //        
    	sprintf(val, "Das ist ein trivialer Counter:\n%d", work->counter);
    	gtk_label_set_text (GTK_LABEL (work->label1), val);
    
    	return TRUE;
    }
    //
    int main(int argc, char *argv[]) {
    //
    	const gchar 	*title = "Counter";
    	WorkFields   	*work;	
    //	
    	work = g_slice_new(WorkFields); 
    //
    //	Standard für jedes GTK Programm
    	gtk_init(&argc, &argv);  // Der "gtk_init" wird ganz am Anfang gemacht
    	work->window1 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(work->window1), title);
        gtk_window_set_default_size(GTK_WINDOW(work->window1), 200, 100);
        gtk_window_set_position(GTK_WINDOW(work->window1), GTK_WIN_POS_CENTER);
        work->label1 = gtk_label_new (title);
        gtk_container_add(GTK_CONTAINER(work->window1), work->label1);
    //
    //	Und erst hier werden die Signale behandelt
    	g_signal_connect(G_OBJECT(work->window1), "destroy", G_CALLBACK(gtk_main_quit), NULL);
    	g_timeout_add(100, (GSourceFunc) time_handler, work);
    //
    	work->counter = 0;
    	gtk_widget_show_all(work->window1);
    	time_handler(work); 
    	gtk_main();
    //
    	g_slice_free(WorkFields, work);
    	return 0;
    }
    

    Es lässt sich mit GTK+2 und 3 compilieren.

    Nicses schrieb:

    Seit einigen Tagen probiere ich mich an GTK+.

    Bleib dran - es lohnt sich... GIMP z.B. ist ja ein klasse Beispiel, was man mit GTK+ alles machen kann 😉



  • Das gleiche Probleme bei GTK init springt er raus und gibt mir die gleiche Fehlermeldung.



  • Welche GTK+ Version ist denn installiert?
    Evtl. einfach mal die neueste (nochmals) installieren.



  • Nicses schrieb:

    Das gleiche Probleme bei GTK init springt er raus und gibt mir die gleiche Fehlermeldung.

    Gut 😃

    Ich fasse mal zusammen, was wir wissen und was nicht.

    Was wir wissen:
    1. Du benutzt OpenSuse
    2. Du benutzt ein IDE mit Debugger
    3. GTK Programme lassen sich anscheinend fehlerfrei compilieren
    4. Bei der Ausführung der Programme tritt ein Fehler auf (auch bei dem, das ich gepostet habe und bei mir fehlerfrei läuft)

    Was wir nicht wissen:
    1. Welches X-System Du benutzt (KDE, GNOME oder ein anderes....)
    2. Welches IDE Du benutzt

    Zu 1. Solltest Du KDE benutzen könnte Dein GTK+ Runtimeenvironment tatsächlich fehlerhaft/unvollständig sein. Dann müsstest Du das nachinstallieren.

    Zu 2. Manche IDEs, wie etwa Code::Blocks lassen die Programmausführung zwar zu - die Programme funktionieren manchmal aber nicht richtig. Hier würde ich einfach mal über die Systemkonsole das Programm aufrufen - also ohne IDE.