无法解析共享库中的符号,但未给出符号名称

时间:2014-10-28 17:31:20

标签: c linux

我对此进行了搜索,但没有找到针对此特定问题的任何答案。我有一个链接在几个共享对象中的应用程序。它抱怨无法解析符号,但它为我提供了一个空字符串,表示它正在尝试解析的符号名称:

<path_to_application_name>: symbol '': can't resolve symbol in lib '<path_to_a_specific_shared_object>'

正如我所提到的,这个应用程序链接到几个共享对象,但它专门调用了一个,它正在寻找符号。 GDB没有提供任何其他信息,至少是我知道如何使用它的能力。有没有办法从这个错误消息中挑出更多信息?如果我知道它实际上在寻找什么,我将能够进行调试。

提前致谢

1 个答案:

答案 0 :(得分:1)

所以我前几天发现了这个问题。首先,我会采取懦弱的方式来挽回面子并注意到我从其他人那里继承了这个特定的项目,这也是我花了很长时间而不是我喜欢它的部分原因。

首先,我试图将现有.so的新版本集成到项目中,基本上只包含了一些我们追求的额外API调用。当然,这恰好是在错误消息中调用的库。显然,.so本身会调用在第三个库中定义的函数,第三个库本身是静态链接到调用.so的原始应用程序中。已经存在共享对象中的API调用以这种奇怪的方式链接,并且在我完成这个项目之前它们工作正常。这可能是让我失望的原因;额外的电话似乎打破了一切。但是,它工作的原因是因为有一个第二个 .so,它显然也有第一个.so中引用的函数的定义,并且实际上是在静态链接库中定义的。新的API调用没有分享这种安排。所以...当我尝试添加第一个.so的这个新版本时,那些新的API调用从未(错误地)定义在第二个.so中。毋庸置疑,我对这种安排进行了一些手术,现在一切都很顺利。感谢大家的帮助和建议。