混合升压库版本

Mixing boost library versions

我们有一个包含各种动态库的应用程序,它们都使用 Boost 1.48(静态)。由于第三方对 Boost Filesystem v2 的依赖,我们无法为应用程序切换到更新的 Boost 版本。

对于新功能,我们为应用程序开发了一个新的动态库,它也应该在其他一些项目中使用。 我们可以为这个新库使用最近的(静态的?)Boost 库,而不干扰应用程序中已经使用的 Boost 库吗?

我应该避免什么陷阱?

如果您使用静态 boost 库构建动态库,则静态 boost 库不会对另一个 boost 静态或动态库产生副作用。

Boost 库一般不支持混合不同版本的库。这样做是否会导致问题取决于许多因素,其中包括有问题的库、您的应用程序设计和目标平台。问题的来源之一可能是符号重定位,它是 Linux 和其他类 UNIX 系统上 linking 过程的一部分。即使您 link 使用 Boost 的静态库,linked 符号仍然可以从您的二进制文件中导出,并且在您加载应用程序时可能会发生冲突。这可能会导致各种未定义的行为,并且通常很难调试。

一般来说,我强烈反对在同一应用程序(即运行时进程)中混合使用不同版本的 Boost。