2011-08-29 3 views
2
// gcc -o 0 $(pkg-config --cflags --libs gtk+-2.0) 1.c 
#include <gtk/gtk.h> 
int main (int argc, char *argv[]) { 
    GFile *f1 = NULL; 
    f1 = g_file_new_for_path ("/home/user/1.txt"); 
    g_printf ("File loaded successfully.\n"); 
    return 0; 
} 

됩니다.
코드를 잘못 작성 했습니까? 아니면 내 시스템에 버그입니까?g_file_new_for_path는()는 세그먼트 오류를 ​​

P. S. : 내 시스템은 아치 리눅스이고 GLib 버전은 2.28.8-1입니다.

+0

GDB를 통해 실행하고 질문에 역 추적을 추가 할 수 있습니까? – GWW

+0

프로그램 수신 신호 SIGSEGV, 세그먼트 오류. 0x00000000에서 ??() (gdb) backtrace # 0 0x00000000 in ??() – 5frame

+0

컴파일 할 때'-g' 플래그가 지정되어 있는지 확인해야합니다. 최적화를 비활성화하면 더 쉽습니다. – GWW

답변

3

g_file_new_for_path - this thread을 사용하기 전에 g_type_init()으로 전화해야합니다. 그 후 프로그램이 작동합니다. 모든

+1

새로운 버전의 glib에서'g_type_init()'가 자동으로 호출되며 더 이상 사용되지 않습니다. – BlackVegetable

2

전나무 당신은

// gcc -o 0 $(pkg-config --cflags --libs gio-2.0) 1.c  
#include <gio/gio.h> 

대신

// gcc -o 0 $(pkg-config --cflags --libs gtk+-2.0) 1.c  
#include <gtk/gtk.h> 

그런 다음해야 g_type_init() 전에 g_file_new_for_path(...)의의 사용해야합니다.

+0

gtk + -2.0 pkgconfig 파일에는 이미 gio-2.0이 포함되어 있습니다. :) – 5frame