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 将只搜索每个库一次。
收到 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 将只搜索每个库一次。