将插件系统与C ++对象和标准库容器一起使用

时间:2018-10-19 17:29:15

标签: c++ dll abi

在阅读了很多有关使用插件的信息之后,这意味着在动态加载的共享库中使用C ++对象,结果大多是:不。

  1. 尤其根本不使用标准库容器或模板。
  2. 当您尝试使用C ++插件时,必须使用具有相同标志和相同标准库的相同编译器。即使那样,也可能会发生崩溃。

我自己做了一个简单的类加载器,可以使用相同的编译器正常工作,而插件实际上可以在同一项目中编译。我要做的是为可以注册的类注册工厂函数。这很好用,像Poco C ++之类的其他库也能做到这一点。

我对您的人员如何解决库边界上的ABI兼容性问题感兴趣。你们中的某些人可能会说,根本不使用插件,也不坚持使用纯C函数和类型。我尽可能地这样做,但是它是C ++,使用C ++的原因是因为它解决了一些在纯C语言中不可行的问题。

我知道,出于充分的原因可能永远不会有标准的C ++ ABI,所以我非常感兴趣如何在使用标准库和C ++插件时避免出现问题。

1 个答案:

答案 0 :(得分:1)

“我很感兴趣您的人们如何解决库边界上的ABI兼容性问题”-我们确保每次都使用完全相同的编译器从头开始构建所有依赖项/库以及可执行文件。至少,这就是 I 所做的。