我有一个链接器错误,它表示对函数的未定义引用。我期望函数的共享库具有该函数名称(我通过nm -s检查)所以现在接下来要看的是函数参数是否正确。如何在共享对象文件中查看函数的参数类型和数量?
编辑:所以它出现的问题是:我试图通过链接共享的 C 对象来创建C ++共享对象文件,但是在C ++源代码中我没有包含头文件“extern”C“”阻止,所以它无法找到那些符号,感谢所有回复此问题的人。这个问题现在解决了。答案 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”“阻止,因此无法找到这些符号,感谢所有回复此问题的人。这个问题现在解决了。