You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GTK断言'GTK_IS_STYLE_PROVIDER_PRIVATE'失败及段错误求助

Gtk3 GResource加载UI触发段错误的问题排查与解决

问题场景

首次尝试将GResource与C代码关联时,调用gtk_builder_new_from_resource()触发段错误,涉及代码如下:

create_window(char *win_id)
{
    char        *p = g_strdup_printf("%s/%s", RESOURCE_PATH, win_id);
    GtkWidget   *win;

    builder = gtk_builder_new_from_resource(p);

    g_free(p);

    win = GTK_WIDGET(gtk_builder_get_object(builder, win_id));

    g_object_unref(G_OBJECT(builder));
    return win;
}

调试确认参数p为/com/jcoppens/farma/farma.ui,路径正确。

错误输出

程序运行时输出如下Critical错误并触发段错误:

(process:946): Gtk-CRITICAL **: 22:01:37.141: _gtk_style_provider_private_get_settings: assertion 'GTK_IS_STYLE_PROVIDER_PRIVATE (provider)' failed

(process:946): Gtk-CRITICAL **: 22:01:37.141: _gtk_style_provider_private_get_settings: assertion 'GTK_IS_STYLE_PROVIDER_PRIVATE (provider)' failed
Segmentation fault

dmesg中对应记录:

Code: 00 00 4c 89 f7 e8 90 87 e1 ff 4c 89 ff e8 c8 be e1 ff 48 83 c4 18 5b 5d 41 5c 41 5d 41 5e 41 5f c3 66 0f 1f 84 00 00 00 00 00 <48> 8b 47 18 48 8b 40 10 c3 0f 1f 80 00 00 00 00 53 48 8b 5f 18 48

GDB调试回溯

错误发生在builder = gtk_builder_new_from_resource(p);行,回溯信息如下:

#1  0x00007ffff7725304 in  () at /usr/lib64/libgtk-3.so.0
#2  0x00007ffff7745c38 in  () at /usr/lib64/libgtk-3.so.0
#3  0x00007ffff7730bcc in  () at /usr/lib64/libgtk-3.so.0
#4  0x00007ffff7745b26 in  () at /usr/lib64/libgtk-3.so.0
#5  0x00007ffff7731512 in  () at /usr/lib64/libgtk-3.so.0
#6  0x00007ffff7f45b33 in g_type_create_instance ()
    at /usr/lib64/libgobject-2.0.so.0
#7  0x00007ffff7f2a700 in  () at /usr/lib64/libgobject-2.0.so.0
#8  0x00007ffff7f2bc0c in g_object_new_with_properties ()
    at /usr/lib64/libgobject-2.0.so.0
#9  0x00007ffff7f2c7c1 in g_object_new () at /usr/lib64/libgobject-2.0.so.0
#10 0x00007ffff774de8a in  () at /usr/lib64/libgtk-3.so.0
#11 0x00007ffff792306d in  () at /usr/lib64/libgtk-3.so.0
#12 0x00007ffff7f45b33 in g_type_create_instance ()
    at /usr/lib64/libgobject-2.0.so.0
#13 0x00007ffff7f2a700 in  () at /usr/lib64/libgobject-2.0.so.0
#14 0x00007ffff7f2bf6c in g_object_newv () at /usr/lib64/libgobject-2.0.so.0
#15 0x00007ffff76d7c44 in  () at /usr/lib64/libgtk-3.so.0
#16 0x00007ffff76d9015 in  () at /usr/lib64/libgtk-3.so.0
#17 0x00007ffff76d9e97 in  () at /usr/lib64/libgtk-3.so.0
#18 0x00007ffff7e2f290 in  () at /usr/lib64/libglib-2.0.so.0
#19 0x00007ffff7e30785 in g_markup_parse_context_parse ()
    at /usr/lib64/libglib-2.0.so.0
#20 0x00007ffff76daeb6 in  () at /usr/lib64/libgtk-3.so.0
#21 0x00007ffff76d529c in gtk_builder_add_from_resource ()
    at /usr/lib64/libgtk-3.so.0
#22 0x00007ffff76d873a in gtk_builder_new_from_resource ()
    at /usr/lib64/libgtk-3.so.0
#23 0x0000000000401296 in create_window (win_id=0x40204b "farma.ui")
    at ../src/main.c:33
#24 0x000000000040132e in main (argc=1, argv=0x7fffffffde98) at ../src/main.c:49
(gdb) 

运行环境

  • Slackware64 15.0
  • glibmm2.64.5(未使用)
  • gcc 12.2.0
  • 内核5.19.17

解决方法

错误原因是加载的UI文件中引用了若干XPM资源文件,这些文件未被正确加入GResource,或者UI文件中仍使用from file方式引用XPM。调整后将XPM文件加入GResource,并在UI中通过from resource方式导入,程序恢复正常。

注:错误信息未直接指向资源引用问题,需结合资源加载逻辑排查。

内容的提问来源于stack exchange,提问作者jcoppens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 04:25:57