在C ++共享对象文件中找到完整的函数定义

时间:2012-05-08 14:28:05

标签: c++ linux compiler-errors shared-libraries linker-errors

我有一个链接器错误,它表示对函数的未定义引用。我期望函数的共享库具有该函数名称(我通过nm -s检查)所以现在接下来要看的是函数参数是否正确。如何在共享对象文件中查看函数的参数类型和数量?

编辑:所以它出现的问题是:我试图通过链接共享的 C 对象来创建C ++共享对象文件,但是在C ++源代码中我没有包含头文件“extern”C“”阻止,所以它无法找到那些符号,感谢所有回复此问题的人。这个问题现在解决了。

4 个答案:

答案 0 :(得分:7)

您可以将nm--demangle选项一起使用:

nm -s --demangle libWhatever.so

尝试使用样本.so给出了输出,例如

  

00005820 T detail :: print_(std :: ostream&,cv :: Mat const&,std :: string const&)

T只是意味着它位于用于生成.so的目标文件中,并且不需要由链接器解析。

答案 1 :(得分:2)

尝试在受损名称上执行c ++ filt。它会解开它,你可以看到参数。

答案 2 :(得分:2)

你可能想要:

nm --demangle --defined-only --dynamic x.so

以上对C ++名称进行了解码,并在动态部分中仅显示已定义的符号,这些符号是可以链接的外部链接的已定义符号。

答案 3 :(得分:0)

所以它出现的问题是:我试图通过链接共享的 C 对象来创建C ++共享对象文件,但是在C ++源代码中我没有在“extern”中包含头文件“C”“阻止,因此无法找到这些符号,感谢所有回复此问题的人。这个问题现在解决了。