2015-04-30 19 views

回答

1

第一步通常是谷歌。搜索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 

看起来最有希望的候选人。让我们看看里面是什么:

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

注意:传递给链接器的库的顺序很重要!链接器只会搜索每个库一次。

+0

谢谢先生!!我已经从源代码编译所有库,所以我有正确版本的库,但正如你告诉'-lgio-2.0'我没有包含它,将包括它,并再次尝试。感谢这样的答案,因为它不仅解释了我的错误,还帮助我在将来如何解决这些错误。 –

+0

@nitinkumar:那么请[接受答案](http://stackoverflow.com/help/someone-answers)以及:-) –

+0

先生,我已经解决了所有未定义的参考错误,现在用我的方式,我只是留下两个'/lib/libatk-bridge-2.0.so:未定义的引用'atspi_is_initialized' /lib/libatk-bridge-2.0.so:未定义的引用'atspi_set_main_context' 其他任何东西? –