8

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

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

4

4 回答 4

8

您可以使用nm以下--demangle选项:

nm -s --demangle libWhatever.so

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

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

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

于 2012-05-08T14:38:38.957 回答
3

你可能想要:

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

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

于 2012-05-08T20:38:51.320 回答
2

尝试对损坏的名称执行 c++filt。它会解开它,你可以看到论点。

于 2012-05-08T14:33:15.323 回答
0

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

于 2012-05-09T00:06:34.130 回答