2017-09-12 14 views
0

Visual Studio 2015에서 gtk + 3.22를 빌드하는 데 많은 시간을 보냈습니다. 마지막으로 빌드되었지만 작은 GUI 프로그램이 실패했습니다. gtk를 초기화한다. 다음과 같이 오류가 표시됩니다.무엇이 잘못 되었습니까? GLib-GObject-WARNING ** : 기존 유형 '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 

첫 번째 경고는 실행 파일이 아이콘 파일을 찾을 수 없기 때문에 존재합니다. 나는 이미 이것을 고치는 방법을 알아 냈다. 그러나 두 번째 경고가 해결되지 않습니다. 이것은 내 첫 gtk + 프로젝트입니다. 코드를 디버깅 할 때 PangoCairoWin32Font 유형의 존재로 인해 PangoCairoFont 유형이 실패한 것으로 보입니다.

무엇이 잘못 될 수 있습니까? 조언을 감사하십시오. 프로그램의

소스 코드 :

#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

프로그램 코드를 제공해 주시겠습니까? –

답변

0

내가 알아 냈어. 실수로 pangocairo 모듈을 DLL 대신 정적 lib에 구축했습니다. 이 lib는 다른 DLL에 더 링크되어 있으므로 전역 변수에 여러 개의 사본이있어 문제를 일으켰습니다.