这是我最近的一个问题产生的一个新问题:compiling error gtk2 source with gtk3: ‘GtkStyle’ {aka ‘struct _GtkStyle’} has no member named ‘font’ 在当前的 Gentoo linux gtk3 中编译 emelfm(一个 gtk2 源程序)的 make 过程在进行以下更改后生成了所有 .0 文件(35):
Makefile.common - 用“pkg-config”替换“gtk-config”和“glib-config”单词:
PREFIX = /usr/local
BIN_DIR = $(PREFIX)/bin
LOCALEDIR = $(PREFIX)/share/locale
PLUGINS_DIR = $(PREFIX)/share/emelfm/plugins
DOC_DIR = $(PREFIX)/share/emelfm/docs
NLS = -DENABLE_NLS
GTK_INCLUDE = `pkg-config --cflags gtk+-2.0`
GTK_LIB = `pkg-config --libs gtk+-2.0`
GLIB_LIB = `pkg-config --libs gtk+-2.0`
CC = gcc -O2 -Wall
35 个 .c 文件中的 5 个:“->”样式语句产生错误,但“_get_active”样式允许编译过程继续。这些是这 5 个 .c 文件中的实际更改:
window.c
line 257 style->font = app.output_font;
style_get_active (app.output_font);
utils.c
line 275 system_ops[i].func(NULL);
i;
line 289 interface_ops[i].func(NULL);
i;
view_dialog.c
line 83 scrollbar = gtk_vscrollbar_new(GTK_TEXT(text_area)->vadj);
scrollbar_get_active (gtk_vscrollbar_new(GTK_TEXT(text_area)));
fileview.c
line 702 style->font = font;
style_get_active (gdk_font_load);
command_panel.c
line 450 style->font = app.output_font;
style_get_active (app.output_font);
line 382 adj = GTK_TEXT(app.output_text)->vadj;
adj_get_active (GTK_TEXT(app.output_text));
line 393 adj = GTK_TEXT(app.output_text)->vadj;
adj_get_active (GTK_TEXT(app.output_text));
但是,make 进程因 DSO 错误而停止:
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
四个点代表 35 个 .o 文件的列表
我意识到我没有根据 gte3 规则完全重写 .c 文件,但看起来 gtk3 足够聪明(AI?)来理解大多数带有警告的语句,我很高兴完成了 .o 文件。是否有类似的快捷方式,简单的方法来解决链接问题? 显然 libgmodule-2.0.so.0 不在某个路径中,即使该文件位于 /usr/lib64 中。 否则我将放弃这个挑战并继续使用 xfe 文件管理器。 emelfm 位于我的旧桌面上,从 Fedora-3 开始。
GTK_LIB =
pkg-config --libs gtk+-2.0
您现在正在使用 pkg-config 来查找编译和链接所需的选项。但您仍在寻找 GTK 2 而不是 GTK 3。正确的设置是
GTK_LIB = `pkg-config --libs gtk+-3.0`
但是仅此一点是没有帮助的。如果不更改 C 代码,就不可能迁移到 GTK3。
你知道emelfm2吗?