我需要在OSX上创建一个插件库,它应该在运行时加载。该库主要使用C ++。插件需要表现的方式是程序将扫描目录并搜索插件。现在它需要从插件中获取一些信息(比如类型),并且需要根据它创建实例。
我搜索了选项,并为OSX获得了这两个选项 - dlopen()
和CFPlugin
。 dlopen()
的优势在于我们不需要扩展我们的基本抽象类(如果我们使用CFPlugin
,我们必须这样做)。缺点是我们需要在知道其类型之前加载库。
对于CFPlugin
,Apple没有明确提到它是否在我们创建实例之前加载。我们可以调用CFPlugInFindFactoriesForPlugInTypeInPlugIn
函数来了解所有能够创建实例的函数。但是,在搜索可用函数之前是否加载了插件?
答案 0 :(得分:1)
最后继续dlopen()
加载*.bundle
插件。使用bundle的好处是*.plist
应始终嵌入其中,并且可以从plist
文件中获取加载bundle之前所需的任何信息。