gtk2 编译错误:命令行中缺少 DSO

问题描述 投票:0回答:1

这是我最近的一个问题产生的一个新问题: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 开始。

path gtk linker-errors
1个回答
0
投票

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吗?

© www.soinside.com 2019 - 2024. All rights reserved.