我想从共享库(.so)访问类符号 这是我需要做的正确方法。
MyClass* pMyClass= (MyClass*)dlsym(phandle, "MyClass");
如果这是正确的方法,那么我应该让我的MyClass标题进行投射。 我想知道是否有其他方法可以做到这一点而不包括标题?
由于
答案 0 :(得分:1)
如您所知,dlsym基本上返回void *
- 一个无类型指针。
该指针是符号的地址 - 只是一个数字。如果你有
class MyClass instance;
在你的.so中,dlsym将返回&instance
的值。那里没有其他信息。致dlsym
,instance
只是一个记忆区域的地址。如果你有
char instance[sizeof(MyClass)]
你会得到完全相同的价值。
所以,回答你的问题 - 不,不知道地址dlsym
返回的符号的内容。你必须自己添加这些知识。这就是为什么你必须转换dlsym
的结果,这就是你需要包含头文件的原因。
答案 1 :(得分:1)
dlsym
可以获得的唯一符号是那些符号
对应于内存中的某些东西:对象或函数。该
类的名称都不是。您可以获得指向对象的指针
类类型,但你不能用它做任何事情(甚至名称
类型)在某处没有标题。 (您可以使用
在你做的时候对班级的前瞻性定义
dlsym
,但因为没有什么可以用指针来做
一个不完整的类型,这对void*
而言并不算多。)