使用dlsym访问类符号

时间:2013-03-22 12:02:53

标签: c++ casting dlsym

我想从共享库(.so)访问类符号 这是我需要做的正确方法。

MyClass* pMyClass= (MyClass*)dlsym(phandle, "MyClass");

如果这是正确的方法,那么我应该让我的MyClass标题进行投射。 我想知道是否有其他方法可以做到这一点而不包括标题?

由于

2 个答案:

答案 0 :(得分:1)

如您所知,dlsym基本上返回void * - 一个无类型指针。

该指针是符号的地址 - 只是一个数字。如果你有

class MyClass instance;

在你的.so中,dlsym将返回&instance的值。那里没有其他信息。致dlsyminstance只是一个记忆区域的地址。如果你有

char instance[sizeof(MyClass)]

你会得到完全相同的价值。

所以,回答你的问题 - 不,不知道地址dlsym返回的符号的内容。你必须自己添加这些知识。这就是为什么你必须转换dlsym的结果,这就是你需要包含头文件的原因。

答案 1 :(得分:1)

dlsym可以获得的唯一符号是那些符号 对应于内存中的某些东西:对象或函数。该 类的名称都不是。您可以获得指向对象的指针 类类型,但你不能用它做任何事情(甚至名称 类型)在某处没有标题。 (您可以使用 在你做的时候对班级的前瞻性定义 dlsym,但因为没有什么可以用指针来做 一个不完整的类型,这对void*而言并不算多。)