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

用GTK3编译emelfm-0.9.2遇GtkStyle无font成员错误,求简易修复

编译emelfm-0.9.2时window.c的GtkStyle错误修复

问题

将emelfm-0.9.2的构建配置从gtk-config改为pkg-config gtk+-2.0后,编译window.c时触发以下错误:

window.c:257:10: error: ‘GtkStyle’ {aka ‘struct _GtkStyle’} has no member named ‘font’
  257 |     style->font = app.output_font;
      |          ^~
make: *** [Makefile:17: window.o] Error 1

原构建配置片段:

NLS = -DENABLE_NLS
GTK_INCLUDE = `gtk-config --cflags`
GTK_LIB = `gtk-config --libs`
GLIB_LIB = `glib-config --libs gthread`
CC = gcc -O2 -Wall

修改后的配置片段:

NLS = -DENABLE_NLS
GTK_INCLUDE = `pkg-config --cflags gtk+-2.0`
GTK_LIB = `pkg-config --libs gtk+-2.0`

修复方案

快速适配GTK2编译(优先推荐)

emelfm-0.9.2原本基于旧版GTK开发,若只是想编译运行而非强制适配GTK3,修改window.c的对应代码即可:

  1. 定位到window.c第257行的style->font = app.output_font;

  2. 将其替换为GTK2官方推荐的字体设置函数:

    gtk_style_set_font(style, app.output_font);
    

    这个函数是GTK2后期替代直接修改style->font的接口,能兼容pkg-config调用的较新GTK2版本。

    若上述函数仍报错,可换用控件级别的字体设置:

    // 假设style是从window控件获取的,替换为你的实际控件变量
    gtk_widget_modify_font(GTK_WIDGET(window), app.output_font);
    

适配GTK3的基础修改

若确实要迁移到GTK3,需先调整构建配置为GTK3,再修改样式代码:

  1. 更新Makefile.common中的GTK配置:
    GTK_INCLUDE = `pkg-config --cflags gtk+-3.0`
    GTK_LIB = `pkg-config --libs gtk+-3.0`
    GLIB_LIB = `pkg-config --libs glib-2.0 gthread-2.0`
    
  2. 替换window.c中的字体设置代码:
    GTK3已完全移除GtkStyle,改用CSS样式系统。将style->font = app.output_font;替换为:
    // 替换为你要设置字体的控件,比如主窗口window
    GtkStyleContext *ctx = gtk_widget_get_style_context(GTK_WIDGET(window));
    GtkCssProvider *provider = gtk_css_provider_new();
    gchar *css = g_strdup_printf("font: %s;", pango_font_description_to_string(app.output_font));
    
    gtk_css_provider_load_from_data(provider, css, -1, NULL);
    gtk_style_context_add_provider(ctx, GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_USER);
    
    g_object_unref(provider);
    g_free(css);
    
    注意:GTK3的样式系统变化较大,这只是解决当前错误的基础修改,后续还需处理其他GtkStyle相关的编译错误。

额外调整

别忘了把旧的glib-config也换成pkg-config,避免其他依赖错误:

GLIB_LIB = `pkg-config --libs glib-2.0 gthread-2.0`

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:20:58