我想从我的共享库 (.so) 中访问一个类符号 这是我需要做的正确方法吗?
MyClass* pMyClass= (MyClass*)dlsym(phandle, "MyClass");
如果这是正确的方法,那么我应该有我的 MyClass header 用于转换。 我想知道是否有任何其他方法可以在不包含标题的情况下执行此操作?
谢谢
最佳答案
如您所知,dlsym 基本上返回 void *
- 一个无类型指针。
那个指针是一个符号的地址——只是一个数字。如果你有
class MyClass instance;
在您的 .so 中,dlsym 将返回 &instance
的值。那里没有其他信息。对于dlsym
,instance
只是一个内存区域的地址。如果你有
char instance[sizeof(MyClass)]
你会得到完全相同的值。
因此,回答您的问题 - 不,不知道其地址 dlsym
返回的符号的内容。你必须自己添加这些知识。这就是为什么您必须转换 dlsym
的结果,这就是为什么您需要包含头文件。
关于c++ - 使用 dlsym 访问类符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15569831/