我们有一个带有各种动态库的应用程序,它们都使用Boost 1.48(静态)。由于第三方对Boost Filesystem v2的依赖,我们无法为该应用程序切换到更新的Boost版本。
对于新功能,我们为应用程序开发了一个新的动态库,它也应该用在其他一些项目中。 我们可以为这个新的lib使用最近的(静态?)Boost lib,而不会干扰应用程序中已经使用的Boost lib吗?
我应该避免任何陷阱?
答案 0 :(得分:3)
Boost库通常不支持混合不同版本的库。是否这样做会导致问题取决于许多因素,其中包括有问题的库,您的应用程序设计和目标平台。问题的一个原因可能是符号重定位,这是Linux和其他类UNIX系统上链接过程的一部分。即使您使用Boost的静态库链接,链接的符号仍然可以从二进制文件中导出,并且在加载应用程序时可能会发生冲突。这可能会导致各种未定义的行为,并且通常很难调试。
一般情况下,我强烈反对在同一个应用程序中混合不同版本的Boost(即运行时进程)。
答案 1 :(得分:1)
如果您使用静态boost库来构建动态库,则静态boost库不会使用另一个boost静态或动态库创建副作用。