error: undefined reference to.. long list while compiling GTK-3.12.2

error: undefined reference to.. long list while compiling GTK-3.12.2

收到 100 多个这样的错误:

./.libs/libgtk-3.so: undefined reference to `g_drive_can_start_degraded'

我已经提供了所有链接器标志,例如 -lglib-2.0 -lfreetype 等。我仍然收到这些错误有什么帮助吗?

第一步往往是Google。搜索 g_drive_can_start_degraded 以找出它可能在哪个 library/project 中。来自 GIO 的第一个 link returns GDrive:https://developer.gnome.org/gio/stable/GDrive.html

再往下写glib: gio/gdrive.c

看来这个功能是glib的一部分。让我们找到这个图书馆:

find /usr/lib* -name "libglib*.so*"

如果没有显示任何匹配项,请尝试使用 /lib*/usr/local/lib*.

等常用位置

对我来说,它给出了这个列表:

/usr/lib/cli/glib-sharp-2.0/libglibsharpglue-2.so
/usr/lib/vmware-installer/2.1.0/lib/lib/libglib-2.0.so.0
/usr/lib/vmware-installer/2.1.0/lib/lib/libglib-2.0.so.0/libglib-2.0.so.0
/usr/lib/vmware/lib/libglib-2.0.so.0
/usr/lib/vmware/lib/libglib-2.0.so.0/libglib-2.0.so.0
/usr/lib/vmware/lib/libglibmm-2.4.so.1
/usr/lib/vmware/lib/libglibmm-2.4.so.1/libglibmm-2.4.so.1
/usr/lib/vmware/lib/libglibmm_generate_extra_defs-2.4.so.1
/usr/lib/vmware/lib/libglibmm_generate_extra_defs-2.4.so.1/libglibmm_generate_extra_defs-2.4.so.1
/usr/lib/x86_64-linux-gnu/libglibmm-2.4.so.1.3.0
/usr/lib/x86_64-linux-gnu/libglibmm_generate_extra_defs-2.4.so.1.3.0
/usr/lib/x86_64-linux-gnu/libglib-2.0.so
/usr/lib/x86_64-linux-gnu/libglibmm-2.4.so.1
/usr/lib/x86_64-linux-gnu/libglibmm_generate_extra_defs-2.4.so.1

/usr/lib/x86_64-linux-gnu/libglib-2.0.so 看起来是最有希望的候选人。让我们看看里面有什么:

objdump --dynamic-syms /usr/lib/x86_64-linux-gnu/libglib-2.0.so | grep g_drive_can_start_degraded

哪个returns什么都没有。也许我的 glib 版本有误(2.x 而不是 3.x)?

但进一步调查显示我也有 /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0:

> objdump --dynamic-syms /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0 | grep  g_drive_can_start_de
000000000003f080 g    DF .text  0000000000000078  Base        g_drive_can_start_degraded

您似乎缺少 -lgio-2.0 某处。

如果库没有定义符号但需要它,输出将如下所示:

0000000000000000      DF *UND*  0000000000000000              g_setenv

请注意地址为 0,段为 *UND* 而不是 .text

注意:您传递给 linker 的库的顺序很重要! linker 将只搜索每个库一次。