Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中动态加载结构的大小_C_Shared Libraries - Fatal编程技术网

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

在C中动态加载结构的大小,c,shared-libraries,C,Shared Libraries,我有一个名为Point.c的文件,其结构定义为: Point 此外,它还具有名为point_str、point_反序列化的函数 现在,有类似的文件 LinkedList.c, Node.c etc with similar definitions. 现在,我使用dlopen在另一个文件中动态调用这些函数 因此,如果我发现类型为Point,我将创建一个字符串: point_str 并通过使用dlopen提供.so文件的路径来调用该函数 但是,我无法动态地知道结构的大小。有办法吗?我想做一些像

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

Point
此外,它还具有名为point_str、point_反序列化的函数

现在,有类似的文件

LinkedList.c, Node.c etc with similar definitions.
现在,我使用dlopen在另一个文件中动态调用这些函数

因此,如果我发现类型为Point,我将创建一个字符串:

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

但是,我无法动态地知道结构的大小。有办法吗?我想做一些像

int size = givemesize("Point", "path_to_so");
这就像dlopen一样,但是要知道结构的大小

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

使用这个大小,我将反序列化从字符串到其实际类型的任何内容。这就是为什么我需要这个尺寸。因此,从命令行开始反序列化点对象。因此,通过这个字符串,我想知道Point.c中的Point对象的实际大小,它有一个libpoint


.so不知道结构的大小,除非您将其编码到.so提供的函数中(如Jonathan在评论中所说)。所有这些信息都在编译时被丢弃。编译过程中会计算任何相关的指针/内存偏移量,并丢弃用于计算这些偏移量的信息。

头文件中没有定义结构吗?如果没有定义结构的头文件,则库中的接口应提供函数(或者,销毁思想,全局变量)您可以通过
dlsym()
访问它以获取值。或者,更可能的是,它提供了一些API来为结构分配空间。如果没有库的支持(作为标头或运行时信息),您必须编写与调试器松散等效的代码来获取信息-如果库是使用可用的调试符号/信息编译的。感谢您的回复,不,它位于同一文件中。如果我在头文件中定义它,假设Point.h,这将如何解决问题?如果您需要知道不透明指针后面的类型的大小,那么我会说一些可疑的东西(很可能您使用了错误的方法来解决问题)你能编辑这个问题并提供一些你为什么需要知道尺寸的信息吗?我编辑了我的问题。谢谢。我是通过在Point.o中添加一个函数来实现的。