无法使用简单的GTK3应用程序

时间:2017-02-12 15:19:58

标签: c gcc gtk strace

我想要的只是一个简单的对话框来选择要处理的文件。 我一段时间没有使用过C语言,但我找不到一个好的工作实例。

代码:

#include <gtk/gtk.h>
#include <stdio.h>

int main(int argc, char const *argv[]) {

  GtkFileChooserNative *native;

  native = gtk_file_chooser_native_new ("Open File", NULL, GTK_FILE_CHOOSER_ACTION_OPEN, NULL, NULL);

  return 0;
}

我用这个命令编译它:

gcc `pkg-config gtk+-3.0 --cflags` `pkg-config gtk+-3.0 --libs` -o out dialog.c

我在gtk_file_chooser_native_new()

上遇到分段错误

也许strace会有所帮助:

http://pastebin.com/TdC0A2J3

1 个答案:

答案 0 :(得分:1)

您需要致电gtk_init之前任何其他GTK功能),或拥有自己的application class并致电g_application_run。您的main应该像往常一样int main(int argc, char**argv)

以下程序不会出现段错误(在Linux / Debian / Sid上,GTK为3.22.7)

#include <gtk/gtk.h>
#include <stdio.h>
int main (int argc, char  **argv) {
  GtkFileChooserNative *native = NULL;
  gtk_init (&argc, &argv);
  native = gtk_file_chooser_native_new ("Open File", NULL,
             GTK_FILE_CHOOSER_ACTION_OPEN, NULL, NULL);
  guint res = gtk_native_dialog_run (GTK_NATIVE_DIALOG (native));
  if (res == GTK_RESPONSE_ACCEPT) {
    char *filename;
    GtkFileChooser *chooser = GTK_FILE_CHOOSER (native);
    filename = gtk_file_chooser_get_filename (chooser);
    printf ("should open %s\n", filename);
    g_free (filename);
  }
  /// in a real application perhaps you want: gtk_main ();
  return 0;

}

并显示对话框。使用

编译
 gcc -Wall -g $(pkg-config gtk+-3.0 --cflags) \
    $(pkg-config gtk+-3.0 --libs) \
    -o out dialog.c

并在调试时使用gdb调试器。