c++ - 我可以在 C++ 中使用可配置的静态链接吗?

标签 c++ plugins modularity

我知道这听起来像是“我可以有动态静态链接吗”这没什么意义,但让我解释一下。

我正在寻找可供探索的选项,我知道可能有一些我不知道的东西。

我的目标是拥有一个模块化的代码库,其中插件将作为静态库提供,以避免暴露 dll 并导致客户可以在他们的代码中吞下一个单一的库。

我想象有一个配置文件列出所有需要的插件,将其提供给脚本和 boom:一个神奇的 sln 文件,其中包含所有准备构建的东西。

我最初的想法是拥有一个“主平台”,它可以了解每个可能的插件接口(interface)并与它们全部链接。客户端尚未实现或需要的插件将是死胡同/无操作实现,而所需的插件将是实现“主平台”调用的接口(interface)的实现。

我认为这可行,但我发现为了模块化而链接死实现的想法在概念上很糟糕。

我看到的主要问题是在“主平台”级别:如何删除无用的 header 以防止无用的链接或添加新开发的 header 而不每次都编辑代码?如果没有大量宏或生成一些源文件,我无法解决这个问题。

其他模式可以解决这个问题吗?

最佳答案

我认为没有不涉及宏魔法和复杂构建系统的可能方法。

如果我没理解错的话,你要做的和我用过的一个库类似,rocksdb .在构建时,您可以指定所需的模块/包,它会为您将它们构建到静态库中。看看他们做了什么,看看是否符合您的要求。

关于c++ - 我可以在 C++ 中使用可配置的静态链接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59257095/

相关文章:

java - Maven easyb插件java堆空间设置?

php - Jquery文件上传插件: Dynamically change upload path?

node.js - 模块化编程和 Node

c++ - Lua 和 C++ : separation of duties

c++ - 如何使用C++将VIDEOHDR数据转换为视频流

c++ - cudaMalloc 和 cudaMemcpy 的包装函数

ubuntu - 将 MDN 的夜间构建作为 CFX 的默认浏览器

java - 在 Eclipse 上创建 Android 模块化应用程序

android - 使用 C++ 支持创建 Android 项目的正确方法

c++ - 能否使用 Cereal 重新创建 Protobuf 的反序列化功能之一?