これは遅すぎるかもしれませんが、gccの最適化でコンパイルされた場合(-O1でも)、次のような行がセグメント化エラーを引き起こしているように見えることが少なくとも不思議です。単純なGTK +アプリケーションで最適化を有効にすると、セグメンテーションフォルトが発生しますか?
settings_dialog = gtk_dialog_new_with_buttons("gatotray Settings"
, NULL, 0, GTK_STOCK_CANCEL, FALSE, GTK_STOCK_SAVE, TRUE, 0);
g_signal_connect(G_OBJECT(settings_dialog), "response", G_CALLBACK(gtk_widget_destroy), NULL);
g_signal_connect(G_OBJECT(settings_dialog), "destroy", G_CALLBACK(settings_destroyed), NULL);
GtkWidget *vb = gtk_dialog_get_content_area(GTK_DIALOG(settings_dialog));
GtkWidget *hb = gtk_hbox_new(FALSE, 3);
gtk_container_add(GTK_CONTAINER(hb), gtk_label_new("Background:"));
GtkWidget *cb = gtk_color_button_new();
gtk_container_add(GTK_CONTAINER(hb), cb);
gtk_container_add(GTK_CONTAINER(vb), hb);
これは、バックトレースです:
(gdb) backtrace
#0 0x00007ffff4d88052 in ??() from /lib/libc.so.6
#1 0x00007ffff5304112 in g_strdup() from /lib/libglib-2.0.so.0
#2 0x00007ffff5bc799d in ??() from /usr/lib/libgobject-2.0.so.0
#3 0x00007ffff5ba826c in g_object_new_valist()
from /usr/lib/libgobject-2.0.so.0
#4 0x00007ffff5ba84f1 in g_object_new() from /usr/lib/libgobject-2.0.so.0
#5 0x00007ffff78502d5 in gtk_button_new_from_stock()
from /usr/lib/libgtk-x11-2.0.so.0
#6 0x00007ffff787cc95 in gtk_dialog_add_button()
from /usr/lib/libgtk-x11-2.0.so.0
#7 0x00007ffff787cd60 in ??() from /usr/lib/libgtk-x11-2.0.so.0
#8 0x00007ffff787cf60 in gtk_dialog_new_with_buttons()
from /usr/lib/libgtk-x11-2.0.so.0
#9 0x0000000000402bb9 in show_settings_dialog() at settings.c:24
#10 0x0000000000403328 in main (argc=1, argv=0x7fffffffe2b8) at gatotray.c:286
... settings.c:24、まさに上記の最初の行である "gtk_dialog_new_with_buttons" のように思えるが犯人である...
バージョン:
GCC:4.4.3
GTK +:2.20.1ところで
は、そのコを言及するのを忘れてしまいました特定の行をに変更すると、の後に競合呼び出しが発生しないようになります。特に、「gtk_container_add(GTK_CONTAINER(hb)、cb);」という行は、
GtkTypes/GTK_MACROSのほぼすべての適切な組み合わせを試しましたが、違いはありません。
コンパイル時に警告が表示されますか? – dreamlax
もちろん、警告はありません! :-) "gcc -c" 'pkg-config --cflags gtk + -2.0'' -std = c99 -Wall -O1 -ggdb" -> – gatopeich
一方、私は可変引数に余分な0を追加していますgtk_dialog_new_with_buttons()のリストは、ドキュメントに対応していない場合でも問題を解決するようです。 va_args、最適化、および/またはこの特定の問題について、より権威ある説明を得られない場合は、私自身がそれに答えるでしょう。 – gatopeich