【发布时间】:2014-06-29 17:04:44
【问题描述】:
我正在编写一个带有许多可选依赖项的 C++ 包。重要的是能够在没有任何这些依赖项的情况下使用包,然后能够在不重新编译软件的情况下添加依赖项。如果依赖项不可用,我想回退到一些默认行为。
每个可选依赖项对应于包的不同共享库,我正在考虑(ab)使用“soversions”来实现此功能,并让次要修订版 0 对应于后备实现。
为了说明,假设有一个核心模块编译到名为“libmy_core.so”的共享库中。我有一个可选功能(取决于“libmy_core.so”以及一些外部包)编译到共享库“libmy_feature.so.1.1”中。但是为了确保代码在没有这个库的情况下也能正常工作,我还构建了一个名为“libmy_feature.so.1.0”的备用模块,它仅依赖于“libmy_core.so”。
然后我将分发“libmy_core.so”和“libmy_feature.so.1.0”。如果用户稍后添加可选的依赖项,“libmy_feature.so.1.1”也将被安装(并优先于“libmy_feature.so.1.0”)。
这是一个可行的解决方案还是有更好的解决方案?类似的方法是否也适用于非 Linux 系统,尤其是 OS X 和 Windows?
【问题讨论】:
标签: c++ plugins shared-libraries versioning dependency-management