我有一个.so文件,我需要在我的c ++代码中使用该方法。没有头文件。我用nm反编译必要的符号,发现方法和类信息如下。
00000000002ec9c0 B CFTDOrderField::m_Describe
0000000000067440 W CFTDOrderField::DescribeMembers()
在我学习之后,我想我应该使用动态加载解决方案。但我不知道如何定义dlsym的返回类型,任何人都可以给我一些提示或解决方案吗?谢谢!!
答案 0 :(得分:-1)
这不是一件轻而易举的事。一般来说,你不能在这里简单地使用dlsym
。与C,C ++破坏符号名称不同,修改标准可能因实现而异,甚至可能因同一编译器的版本而异。您仍然可以使用按照C约定导出的函数,但是我担心,如果没有标题,使用整个类型(C ++类)是不可能的。
在C ++中,延迟加载和使用共享对象导出类总是相当棘手。您可以使用this教程中的特殊函数,或者您可以使用更高级的技术,如factories,最后,您可以依赖您的编译器/链接器(所有流行的现代编译器都支持此功能),但无论哪种方式你需要一些关于你将在你的程序中使用的类型的信息,这些信息应该在编译时可用。此信息包含在头文件中。所以,你的问题的答案是相当消极的。
关于名称损坏及其为何"邪恶"请参阅评论中的链接。 (不要太过于字面意思 - 这有技术上的原因,即使这个功能有时让生活变得更难: - )