2017-09-12 5 views
0

J'ai passé plusieurs semaines en essayant d'obtenir gtk + 3,22 pour construire sur Visual Studio 2015. Enfin, je l'ai construit, mais le petit programme GUI a échoué pour initialiser gtk. L'erreur est illustrée comme ci-dessous:Qu'est-ce qui pourrait être erroné: GLib-GObject-AVERTISSEMENT **: ne peut pas enregistrer le type existant « PangoCairoFont »

gtk+_gtk_test.exe:15980): Gtk-WARNING **: Could not find the icon 'window-minimize-symbolic-ltr'. The 'hicolor' theme 
was not found either, perhaps you need to install it. 
You can get a copy from: 
     http://icon-theme.freedesktop.org/releases 

(gtk+_gtk_test.exe:15980): GLib-GObject-WARNING **: cannot register existing type 'PangoCairoFont' 

(gtk+_gtk_test.exe:15980): GLib-GObject-CRITICAL **: g_type_interface_add_prerequisite: assertion 'G_TYPE_IS_INTERFACE (interface_type)' failed 

(gtk+_gtk_test.exe:15980): Glib-CRITICAL **: g_once_init_leave: assertion 'result != 0' failed 

Le premier avertissement existe parce que l'exécutable ne peut pas localiser les fichiers d'icône. J'ai déjà compris comment résoudre ce problème. Cependant, je suis incapable d'obtenir le deuxième avertissement fixé. C'est mon premier projet gtk +. Quand je déboguer le code, il semble que le type PangoCairoFont a échoué en raison de l'existence de type PangoCairoWin32Font.

Qu'est-ce qui pourrait ne pas fonctionner ici? Appréciez vos conseils.

code source du programme:

#include <gtk/gtk.h> 

void hello(GtkWidget *widget, gpointer data) 
{ 
    g_print("Hello, World\n"); 
} 

gint delete_event(GtkWidget *widget, GdkEvent event, gpointer data) 
{ 
    /* when this fucntion returns FALSE, the delete-event 
     signal becomes a destroy signal*/ 
    return FALSE; 
} 

void end_program(GtkWidget *widget, gpointer data) 
{ 
    /* End the main loop */ 
    gtk_main_quit(); 
} 

int main(int argc, char **argv) 
{ 
    GtkWindow *window; 
    GtkButton *button; 

    /* initialize Gtk+ */ 
    gtk_init(&argc, &argv); 

    /* create window, set default height and width to 200px */ 
    window = g_object_new(GTK_TYPE_WINDOW, 
     "default-height", 200, 
     "default-width", 200, 
     "border-width", 12, 
     "title", "GtkHello", 
     NULL); 

    /* add signal handlers for window */ 
    g_signal_connect(window, "delete-event", G_CALLBACK(delete_event), 
     NULL); 

    g_signal_connect(window, 
     "destroy", G_CALLBACK(end_program), 
     NULL); 

    /* create button */ 
    button = g_object_new(GTK_TYPE_BUTTON, 
     "label", "_Hello, World!\nClick here.", 
     "use-underline", TRUE, 
     NULL); 

    g_signal_connect(button, 
     "clicked", G_CALLBACK(hello), 
     NULL); 

    g_signal_connect_swapped(button, 
     "clicked", G_CALLBACK(gtk_widget_destroy), 
     window); 

    gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(button)); 

    gtk_widget_show_all(GTK_WIDGET(window)); 

    /* start main loop */ 
    gtk_main(); 

    return 0; 
} 
+0

Pouvez-vous fournir le code de votre programme? –

Répondre

0

Je compris. J'ai construit par erreur le module pangocairo dans une lib statique au lieu de DLL. Cette lib est encore lié dans différentes DLL de sorte que la variable globale a plusieurs copies, ce qui a causé le problème.