在C中动态加载结构的大小

时间:2013-07-26 17:16:01

标签: c shared-libraries

我有一个名为Point.c的文件,其结构定义为:

Point

此外,它的功能名为point_str,point_deserialize。

现在,有像这样的类似文件,如

LinkedList.c, Node.c etc with similar definitions.

现在,我使用dlopen在另一个文件中动态调用这些函数。

所以,如果我发现该类型是Point,我将创建一个字符串:

point_str

并通过使用dlopen提供.so文件的路径来调用该函数。

但是,我无法动态地了解结构的大小。有办法吗?我想做像

这样的事情
int size = givemesize("Point", "path_to_so");

这就像dlopen一样,但要知道结构的大小。

编辑:为什么我想知道尺寸?

使用该大小,我将从字符串到其实际类型的任何内容反序列化。这就是我需要这个尺寸的原因。因此,从命令行开始反序列化Point对象。所以,使用该字符串我想知道Point对象的实际大小,它驻留在Point.c中并且有一个libpoint.so

1 个答案:

答案 0 :(得分:1)

不,你不能。

.so不知道结构的大小,除非你在.so中提供的函数中编码(就像Jonathan在评论中所说的那样)。所有这些信息在编译时都被丢弃。在编译期间计算任何相关的指针/内存偏移量,并且用于计算这些偏移量的信息将被丢弃。