用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的对应代码即可:
定位到window.c第257行的
style->font = app.output_font;将其替换为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,再修改样式代码:
- 更新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` - 替换window.c中的字体设置代码:
GTK3已完全移除GtkStyle,改用CSS样式系统。将style->font = app.output_font;替换为:
注意:GTK3的样式系统变化较大,这只是解决当前错误的基础修改,后续还需处理其他// 替换为你要设置字体的控件,比如主窗口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);GtkStyle相关的编译错误。
额外调整
别忘了把旧的glib-config也换成pkg-config,避免其他依赖错误:
GLIB_LIB = `pkg-config --libs glib-2.0 gthread-2.0`
内容的提问来源于stack exchange,提问作者Janos Komaromi
相关产品推荐
相关产品推荐

