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

Find the complete function definition inside C++ shared object file

本文关键字:函数 定义 C++ 查找 共享 对象 文件      更新时间:2023-10-16

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

编辑:所以问题是:我试图通过链接共享C对象来创建C++共享对象文件,但是在C++源中,我没有在"extern "C"块中包含标题,因此无法找到这些符号,感谢所有回答此问题的人。这个问题现在已经解决了。

您可以将

nm--demangle选项一起使用:

nm -s --demangle libWhatever.so

在示例 .so 上尝试一下,给了我输出,例如

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

T 仅表示它位于用于进行.so的对象文件中,不需要由链接器解析。

你可能想要:

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

上面的名称C++解散,并在动态部分中仅显示定义的符号,动态部分是具有外部链接的定义符号,可以链接。

尝试在损坏的名称上执行 c++filt。它将解开它,您可以看到参数。

所以问题来了:我试图通过链接共享 C 对象来创建一个C++共享对象文件,但在C++源中我没有在"extern "C"块中包含标题,因此它无法找到这些符号,感谢所有回答这个问题的人。这个问题现在已经解决了。