c中的插件架构类型

Posted

技术标签:

【中文标题】c中的插件架构类型【英文标题】:types of plugin architectures in c 【发布时间】:2011-02-06 18:26:47 【问题描述】:

可以使用 2 种技术 (AFAIK) 在 C 中设计插件:

    一直使用 dlopen():核心代码要求库中的所有函数都具有已知名称和原型。它 dlopen()s 库并通过 dlsym() 获取所有函数指针 保留一个公开的已知函数,该函数采用由插件实现的函数填充的结构。这个函数是通过 dlsym() 获得的,并在开始时调用一次。

您认为哪种技术更好,为什么?如果有的话,请提及任何其他方法。

【问题讨论】:

这取决于你是否关心便携性。使用dlopendlsym 等会限制您使用特定的操作系统子集。您可能需要考虑其他更与平台无关的选项。 @Paul R:我很好奇您建议还有哪些与平台无关的解决方案(除了 dlopen/LoadLibrary 的包装器)? @B Mitch:插件架构只是一种约定——应用程序和构成插件的代码块之间的契约——这种架构在 Linux 存在之前就已经存在。 @Paul R:我并不反对该架构已经存在了很长时间,我只是好奇它在 C 中存在哪些可移植实现。谢谢。 【参考方案1】:

我更喜欢第二种方式,因为它会容易得多:

加载你的插件:它只需要一次调用dlsym,而不是几十次

处理您的插件:您可以使用函数指针传递结构。而是传递数十个函数或在框架中构建这样的结构以便传递它。

请记住,更简单意味着更不容易出错。

【讨论】:

以上是关于c中的插件架构类型的主要内容,如果未能解决你的问题,请参考以下文章

Java中的数据类型

内存对齐:C/C++编程中的重要性和技巧

[架构之路-23]:目标系统 - 系统软件 - C语言的结构与程序的工作原理 - 数据类型与数据定义(待续)

C51的数据类型和C语言的数据类型的区别?

在 GraphQL 架构中使用泛型对象作为输入类型时出现问题错误:架构必须包含唯一的命名类型

推荐这款类型转换神器!Mapstruct新出的Spring插件