使用带有C++对象和标准库容器的插件系统

Using a plugin system with C++ object and standard library containers

本文关键字:系统 插件 标准 C++ 对象      更新时间:2023-10-16

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

  1. 特别是根本不要使用标准库容器或模板。
  2. 当您尝试使用C++插件时,您必须使用相同的编译器和相同的标志和相同的标准库。即便如此,也可能会出现崩溃。

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

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

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

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