我已经在win11机器上使用MSYS2从官网安装了GTK3 3.24.38。
我正在 Windows 机器上编译一个 Linux 应用程序,除了
之外,它工作正常gtk_file_chooser_dialog_new() 函数使系统崩溃。
我使用 minGW gcc 13.2 和 VCcode,应用程序编译正常并运行,除非文件对话框尝试打开。
代码是:
dialog = gtk_file_chooser_dialog_new ("Open File",
NULL,
GTK_FILE_CHOOSER_ACTION_SAVE,
"_Cancel", GTK_RESPONSE_CANCEL,
"_Save", GTK_RESPONSE_ACCEPT,
NULL);
GDB调试信息:
Thread 1 received signal SIGTRAP, Trace/breakpoint trap.
0x00007ff8f6fb0137 in glib-2.0-0!g_log_structured_array ()
我认为一定有例外,但我猜在Windows系统上日志文件没有设置。
我尝试传递 0 而不是 NULL 来查看是否是 NULL 定义问题,但我仍然崩溃。
不知道如何在 Windows 中设置 GTK 的日志文件。
谢谢。多方计算
调用堆栈:
glib-2.0-0.dll!glib-2.0-0!g_log_structured_array (Unknown Source:0)
glib-2.0-0.dll!glib-2.0-0!g_log_default_handler (Unknown Source:0)
glib-2.0-0.dll!glib-2.0-0!g_logv (Unknown Source:0)
glib-2.0-0.dll!glib-2.0-0!g_log (Unknown Source:0)
gio-2.0-0.dll!gio-2.0-0!g_settings_set_int64 (Unknown Source:0)
gobject-2.0-0.dll!gobject-2.0-0!g_weak_ref_set (Unknown Source:0)
gobject-2.0-0.dll!gobject-2.0-0!g_object_new (Unknown Source:0)
gobject-2.0-0.dll!gobject-2.0-0!g_object_new_valist (Unknown Source:0)
gobject-2.0-0.dll!gobject-2.0-0!g_object_new (Unknown Source:0)
gtk-3-vs17.dll!gtk_file_chooser_native_set_cancel_label (Unknown Source:0)
gtk-3-vs17.dll!gtk_file_chooser_native_set_cancel_label (Unknown Source:0)
gtk-3-vs17.dll!gtk_file_chooser_button_set_width_chars (Unknown Source:0)
gobject-2.0-0.dll!gobject-2.0-0!g_closure_invoke (Unknown Source:0)
gobject-2.0-0.dll!gobject-2.0-0!g_signal_stop_emission_by_name (Unknown Source:0)
gobject-2.0-0.dll!gobject-2.0-0!g_signal_stop_emission_by_name (Unknown Source:0)
gobject-2.0-0.dll!gobject-2.0-0!g_signal_emit_by_name (Unknown Source:0)
gtk-3-vs17.dll!gtk_file_chooser_widget_new (Unknown Source:0)
gobject-2.0-0.dll!gobject-2.0-0!g_weak_ref_set (Unknown Source:0)
gobject-2.0-0.dll!gobject-2.0-0!g_object_setv (Unknown Source:0)
gobject-2.0-0.dll!gobject-2.0-0!g_object_set_property (Unknown Source:0)
打开文件本机对话框可以工作,但保存文件本机对话框不起作用。这有效。
native = gtk_file_chooser_native_new ("Open File",
NULL,
action,
"_Open",
"_Cancel");
终于找到答案了。 您必须创建一个允许 gtk 查找模式的目录结构。将您的应用程序放在我创建的根目录中...
app-root-dir|
-share|
-glib-2.0|
-schemas|
然后您可以从 gtk 构建目录复制编译后的架构:
C:\gtk-build\gtk\x64 elease\share\glib-2.0\schemas\gschemas.compiled
进入您的新应用程序架构目录。文件保存对话框不起作用。