GTK 소스컴파일이 잘안되네요.....
글쓴이: 등짝을보자 / 작성시간: 목, 2006/10/19 - 11:22오전
http://wiki.kldp.org/wiki.php/LinuxdocSgml/GtkTutorial-TRANS
이 문서을 참고하면서 GTK 공부을 하고있습니다.
근데 여기 7. 버튼 widget 예제을 컴파일 하니 오류가 떠서요..
원인이 무엇인지 잘모르겠습니다..
gcc -Wall -g t1.c -o t1 `pkg-config --cflags --libs gtk+-2.0`
컴파일은 이렇게 했습니다. 이렇게 하니 결과는
(t1:6809): Gdk-CRITICAL **: gdk_pixmap_colormap_create_from_xpm: assertion `drawable != NULL || colormap != NULL' failed (t1:6809): Gtk-CRITICAL **: gtk_pixmap_new: assertion `val != NULL' failed (t1:6809): Gtk-CRITICAL **: gtk_box_pack_start: assertion `GTK_IS_WIDGET (child)' failed 세그멘테이션 오류
이렇게 뜨더군요...info.xpm 이라는 비트맵도 같은 폴더에 있습니다.
현재 저는 fedora 4 을 쓰고있으면 CD 설치시 깔리는 GTK 개발도구을 깔았습니다.
rpm -qa | grep gtk gtkhtml2-2.6.3-1 gnome-python2-gtkhtml2-2.10.0-2.1 iiimf-gtk-12.2-4 pygtk2-libglade-2.6.2-0.fc4.4 gtk2-engines-2.6.3-2 pygtk2-2.6.2-0.fc4.4 gtk2-2.6.7-4 authconfig-gtk-4.6.12-1 gtkspell-2.0.7-3 gtkhtml3-3.6.2-1 gtksourceview-1.2.0-1 gtk2-devel-2.6.7-4 gtk+-1.2.10-39 gtk-engines-0.12-7 gtk-doc-1.3-2 usermode-gtk-1.80-1 pygtk2-devel-2.6.2-0.fc4.4
이것은 그 예제 소스입니다..
/* buttons.c */ #include <gtk/gtk.h> /* 이미지와 그것에 패킹된 라벨을 가지고 있는 hbox를 하나 만든다. * 그리고 그 박스를 리턴한다. */ GtkWidget *xpm_label_box (GtkWidget *parent, gchar *xpm_filename, gchar *label_text) { GtkWidget *box1; GtkWidget *label; GtkWidget *pixmapwid; GdkPixmap *pixmap; GdkBitmap *mask; GtkStyle *style; /* xpm과 라벨을 위한 박스를 만든다. */ box1 = gtk_hbox_new (FALSE, 0); gtk_container_border_width (GTK_CONTAINER (box1), 2); /* 버튼의 스타일을 취한다.. background 색깔을 취하는 것 같은데, * 아니라면 누군가 나에게 정정해 주길 바란다. */ style = gtk_widget_get_style(parent); /* xpm 파일로부터 픽스맵을 만든다. */ pixmap = gdk_pixmap_create_from_xpm (parent->window, &mask, &style->bg[GTK_STATE_NORMAL], xpm_filename); pixmapwid = gtk_pixmap_new (pixmap, mask); /* 버튼을 위한 라벨을 만든다. */ label = gtk_label_new (label_text); /* 박스 안으로 픽스맵과 라벨을 패킹해 넣는다. */ gtk_box_pack_start (GTK_BOX (box1), pixmapwid, FALSE, FALSE, 3); gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 3); gtk_widget_show(pixmapwid); gtk_widget_show(label); return (box1); } /* 우리의 전형적인 callback 함수다. */ void callback (GtkWidget *widget, gpointer data) { g_print ("Hello again - %s was pressed\n", (char *) data); } int main (int argc, char *argv[]) { /* GtkWidget은 widget들을 위한 기억장소 종류다. */ GtkWidget *window; GtkWidget *button; GtkWidget *box1; gtk_init (&argc, &argv); /* 윈도를 하나 만든다. */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "Pixmap'd Buttons!"); /* 모든 윈도들에 대해 이렇게 해주는 것이 좋을 것이다. */ gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_exit), NULL); /* 윈도의 border width를 세팅한다. */ gtk_container_border_width (GTK_CONTAINER (window), 10); /* 새로운 버튼을 하나 만든다. */ button = gtk_button_new (); /* 이쯤에서 이 함수를 쓰는 것을 기억하라. */ gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (callback), (gpointer) "cool button"); /* 박스를 만드는 함수다. */ box1 = xpm_label_box(window, "info.xpm", "cool button"); /* 우리 widget들을 패킹하고, 보여준다. */ gtk_widget_show(box1); gtk_container_add (GTK_CONTAINER (button), box1); gtk_widget_show(button); gtk_container_add (GTK_CONTAINER (window), button); gtk_widget_show (window); /* 여기서부터는 뭔가 재미있는 일이 시작될 때까지 무작정 기다린다. */ gtk_main (); return 0; }
여기까지 읽어주셔서 감사합니다..
좋은 하루되세요...:)
Forums:
댓글 달기