我有一个链接器错误,它说未定义对函数的引用。我希望函数所在的共享库具有该函数名称(我通过 nm -s 检查)所以现在我想看看函数参数是否正确。如何查看共享对象文件中函数的类型和参数数量?
编辑:所以它出现的问题是:我试图通过链接共享C对象来创建 C++ 共享对象文件,但是在 C++ 源代码中我没有在“extern”C“”块中包含标题,所以它无法找到这些符号,感谢所有回答此问题的人。这个问题现在已经解决了。
我有一个链接器错误,它说未定义对函数的引用。我希望函数所在的共享库具有该函数名称(我通过 nm -s 检查)所以现在我想看看函数参数是否正确。如何查看共享对象文件中函数的类型和参数数量?
编辑:所以它出现的问题是:我试图通过链接共享C对象来创建 C++ 共享对象文件,但是在 C++ 源代码中我没有在“extern”C“”块中包含标题,所以它无法找到这些符号,感谢所有回答此问题的人。这个问题现在已经解决了。
您可以使用nm
以下--demangle
选项:
nm -s --demangle libWhatever.so
在样本上尝试一下 .so 给了我输出,例如
00005820 T detail::print_(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“”块中包含标题,所以它不是能够找到这些符号,感谢所有回答这个问题的人。这个问题现在已经解决了。