【发布时间】:2009-08-17 23:58:29
【问题描述】:
我有一个程序,它通过从某个 plugin_name.so 动态加载一个函数来实现一个插件系统(像往常一样)。
但反过来,我有一个静态“帮助器”库(我们称之为 helper.a),它的功能既可用于主程序,也可用于插件中的主要功能。它们不必以任何方式进行互操作,它们只是文本操作等的辅助函数。
这个程序一旦启动,就无法重新加载或重新启动,这就是为什么我希望插件拥有新的“帮助”功能,而不是主程序。
所以我的问题是.. 是否可以强制 .so 中的这个“插件功能代码”使用(静态链接?)与主程序不同的(可能是更新的)“助手”版本?
如何做到这一点?也许通过静态链接或以其他方式将 helper.a 添加到 plugin_name.so?
【问题讨论】:
-
我想补充一点,我不想或期望使用主程序中的新助手库。我只想将每个新插件与更新/更好的助手链接图书馆。
-
辅助函数不能使用动态链接有什么原因吗?
-
一旦启动,主程序无法停止执行,甚至重新加载更新的 helper.so.. 程序只需要非常基本的帮助功能,因为它只是插件的占位符。所以如果我有一个新的/改进的或扩展的帮助程序库,我更愿意再次编译整个插件。我认为分发一个 .so(插件)比分发两个 .so(插件和插件使用的最新助手)更实用
-
所以您需要能够更新插件或插件使用的库代码,而无需重新启动主进程?
-
这是正确的,增加了复杂性,可能有几十个插件作为线程并发运行,每个插件都有自己版本的帮助库(插件越新,库可能越新) - 并且 - 主程序还内置了一些非常简单的操作的帮助程序库,在其编译时可用的最新版本(我真的不关心在它工作正常时更新它)。也可能有其他库 - 使用 helper 中的功能 - 可以链接到每个插件..也许一些插件也会共享这些库..