c中的插件架构类型
Posted
技术标签:
【中文标题】c中的插件架构类型【英文标题】:types of plugin architectures in c 【发布时间】:2011-02-06 18:26:47 【问题描述】:可以使用 2 种技术 (AFAIK) 在 C 中设计插件:
-
一直使用 dlopen():核心代码要求库中的所有函数都具有已知名称和原型。它 dlopen()s 库并通过 dlsym() 获取所有函数指针
保留一个公开的已知函数,该函数采用由插件实现的函数填充的结构。这个函数是通过 dlsym() 获得的,并在开始时调用一次。
您认为哪种技术更好,为什么?如果有的话,请提及任何其他方法。
【问题讨论】:
这取决于你是否关心便携性。使用dlopen
、dlsym
等会限制您使用特定的操作系统子集。您可能需要考虑其他更与平台无关的选项。
@Paul R:我很好奇您建议还有哪些与平台无关的解决方案(除了 dlopen/LoadLibrary 的包装器)?
@B Mitch:插件架构只是一种约定——应用程序和构成插件的代码块之间的契约——这种架构在 Linux 存在之前就已经存在。
@Paul R:我并不反对该架构已经存在了很长时间,我只是好奇它在 C 中存在哪些可移植实现。谢谢。
【参考方案1】:
我更喜欢第二种方式,因为它会容易得多:
加载你的插件:它只需要一次调用dlsym
,而不是几十次
处理您的插件:您可以使用函数指针传递结构。而是传递数十个函数或在框架中构建这样的结构以便传递它。
请记住,更简单意味着更不容易出错。
【讨论】:
以上是关于c中的插件架构类型的主要内容,如果未能解决你的问题,请参考以下文章
[架构之路-23]:目标系统 - 系统软件 - C语言的结构与程序的工作原理 - 数据类型与数据定义(待续)