linux - 错误 : undefined reference to.。编译 GTK-3.12.2 时的长列表

标签 linux gtk undefined-reference

出现 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/

相关文章:

linux - 查找shell脚本-日志(SUSE Linux, bash, if, find)

linux - 计算输入文件中字符串的出现次数

c - 父子进程通信

c - header 中声明的函数在主文件中不可访问

php - 是否可以使用 PHP 将 doc 文件转换为 HTML?

ruby - Ruby 中的 GTK FileChooserDialog 不会关闭窗口

linux - Linux 服务器上的 Haxe 应用程序和 Gtk-WARNING

cocoa - GUI框架实际上是如何开发的

c++ - 什么是 undefined reference / Unresolved external symbol 错误,如何解决?

c++ - 对用户定义函数的 undefined reference