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

编译GTK2程序emelfm时遇DSO缺失命令行错误求助

解决emelfm编译时的libgmodule链接错误(GTK3环境下编译GTK2程序)

问题背景

在Gentoo Linux的GTK3环境中编译旧版GTK2文件管理器emelfm,已完成以下修改并生成35个.o文件:

  • 修改Makefile.common,将gtk-config/glib-config替换为pkg-config,指定gtk+-2.0的编译和链接参数
  • 修改5个.c文件中的GTK2语法(如GtkStyle->font、GTK_TEXT()->vadj等)以适配编译

但链接阶段出现以下错误:

gcc -O2 -Wall .... -o emelfm `pkg-config --libs gtk+-2.0` 
/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../x86_64-pc-linux-gnu/bin/ld: plugins.o: undefined reference to symbol 'g_module_error'
/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../x86_64-pc-linux-gnu/bin/ld: /usr/lib64/libgmodule-2.0.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: *** [Makefile:22: emelfm] Error 1

快捷解决方案

错误原因是链接命令未显式引入libgmodule-2.0,而emelfm的插件模块依赖该库。只需修改Makefile.common中的链接参数:

将原GLIB_LIB行:

GLIB_LIB = `pkg-config --libs gtk+-2.0`

替换为:

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

或者直接在最终链接命令中追加pkg-config --libs gmodule-2.0,修改后的链接命令应为:

gcc -O2 -Wall .... -o emelfm `pkg-config --libs gtk+-2.0` `pkg-config --libs gmodule-2.0`

执行make clean && make重新编译链接即可解决该DSO错误。

额外建议

  1. 代码修正注意:你之前对.c文件的修改(如style_get_active、adj_get_active的用法)并不符合GTK的API规范,只是绕过了编译错误。后续运行程序可能出现功能异常或崩溃,若要长期使用,建议参考GTK3的API文档修正这些代码(例如用gtk_widget_get_style_context()获取样式上下文,再通过gtk_style_context_get_font()获取字体)。
  2. 原生GTK2编译更顺畅:在Gentoo中可以直接安装GTK2的开发包(emerge dev-libs/glib:2 x11-libs/gtk+:2),然后用原生GTK2环境编译emelfm,无需修改大量代码,兼容性更好。

内容的提问来源于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.22 01:15:05