c++ - 使用 dlsym 访问类符号

标签 c++ casting dlsym

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

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

如果这是正确的方法,那么我应该有我的 MyClass header 用于转换。 我想知道是否有任何其他方法可以在不包含标题的情况下执行此操作?

谢谢

最佳答案

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

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

class MyClass instance;

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

char instance[sizeof(MyClass)]

你会得到完全相同的值。

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

关于c++ - 使用 dlsym 访问类符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15569831/

相关文章:

c++ - 使用 NULL 句柄调用 dlsym() 不会返回 NULL,而是返回一个随机函数

c++ - C++ 中的 DBL_MAX 是什么?

c++ - Arduino 库中的多个定义错误

c++ - 使用 C 动态加载例程的问题

type-conversion - C#中的类型转换

c++ - 转换 std::vector 的所有成员

c++ - 将共享库与 dlopen 一起使用 - 共享对象找不到加载程序导出的符号

c++ - 用于数组、矩阵、 vector 和经典线性代数运算的 C++ 库

c++ - 如何使用功能写LCD文字? -Arduino的

c# - 将 LINQ 结果转换到 ObservableCollection