出现 100 多个这样的错误:
./.libs/libgtk-3.so: undefined reference to `g_drive_can_start_degraded'
我已经提供了所有链接器标志,如 -lglib-2.0 -lfreetype
等。我仍然收到这些错误有什么帮助吗?
最佳答案
第一步通常是谷歌。搜索 g_drive_can_start_degraded
以找出它可能在哪个库/项目中。第一个链接从 GIO 返回 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
什么都不返回。也许我的 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
。
注意:传递给链接器的库的顺序很重要!链接器将只搜索每个库一次。
关于linux - 错误 : undefined reference to.。编译 GTK-3.12.2 时的长列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29967562/