GTK 소스컴파일이 잘안되네요.....

등짝을보자의 이미지

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;
}

여기까지 읽어주셔서 감사합니다..
좋은 하루되세요...:)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.