我的应用程序有一个插件系统,允许我的用户编写他们自己的插件,这些插件在运行时加载。通常这很好,但在某些情况下,两个插件使用相同的库,这会导致这两者之间发生冲突。
例子:
插件 A想要使用TouchJSON来处理 JSON,因此创建者将 TouchJSON 代码添加到插件源中,它被编译并链接到插件二进制文件中。后来插件 B也想使用相同的库,并且完全相同。现在,当我的应用程序加载这两个不同的插件时,它会检测到这一点并发出如下警告:
CJSONScanner 类在 [path_to_plugin_a] 和 [path_to_plugin_b] 中都实现了。将使用两者之一。哪一个是未定义的。
由于我的应用程序只是加载插件并确保它们符合某个协议,因此我无法控制加载哪些插件以及两个或多个是否使用同一个库。
只要两个插件使用完全相同版本的库,这可能会起作用,但是一旦一个插件中的 API 发生更改,就会出现一堆问题。
对此我能做些什么吗?