C++ 使用dlsym访问类符号

C++ 使用dlsym访问类符号,c++,casting,dlsym,C++,Casting,Dlsym,我想从共享库(.so)访问类符号 这是我需要的正确方法吗 MyClass* pMyClass= (MyClass*)dlsym(phandle, "MyClass"); 如果这是正确的方法,那么我应该有我的MyClass头来进行铸造。 我想知道是否有任何其他方法,我可以做到这一点,而不包括标题 谢谢正如您所知,dlsym基本上返回void*——一个非类型指针 那个指针是一个符号的地址——只是一个数字。如果你有 class MyClass instance; 在.so中,dlsym将返回&in

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

MyClass* pMyClass= (MyClass*)dlsym(phandle, "MyClass");
如果这是正确的方法,那么我应该有我的MyClass头来进行铸造。 我想知道是否有任何其他方法,我可以做到这一点,而不包括标题


谢谢

正如您所知,dlsym基本上返回
void*
——一个非类型指针

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

class MyClass instance;
在.so中,dlsym将返回
&instance
的值。这里没有其他信息。对于
dlsym
instance
只是一个内存区域的地址。如果你有

char instance[sizeof(MyClass)]
你会得到完全相同的值


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

使用
dlsym
可以获得的唯一符号是 对应于内存中的某个东西:对象或函数。这个 类的名称既不是。您可以获得指向对象的指针 类类型,但您不能对其执行任何操作(即使是名称) 类类型),但在某个地方没有标头。(你可以使用 在执行以下操作时,类的正向定义:
dlsym
,但由于指针指向
这是一个不完整的类型,它不能为您购买太多的
void*

您能澄清一下吗?您说的是“类符号”,但您可能指的是指向类“”实例的“类型的全局变量”指针。“是吗?”阿尔卡迪:是的,这就是我需要的。但是,对于编译上述代码,我需要包含MyClass头,我想知道是否可以避免这种情况?如果不包含头,编译器如何知道什么是
MyClass
。还有,什么是
MyClass
,实际上是
phandle
“指出”的?对象还是类定义?@KirilKirov:这就是我想知道的,是否有解决方法,或者这完全不可能?你为什么想要这样?