2015-07-03 85 views
1

我们有各种动态库的应用程序,它们都使用Boost 1.48(静态)。由于第三方对Boost Filesystem v2的依赖,我们无法切换到适用于该应用程序的更新Boost版本。混合增强库版本

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

我应该避免的陷阱?

+1

如果您将不同的项目设置为使用不同版本的boost,我看不出问题在哪里。 – Jepessen

+1

另请参阅http://stackoverflow.com/questions/27312123/boost-libraries-built-with-relative-paths/27312154#27312154 – sehe

回答

1

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

一般来说,我会极力阻止在同一个应用程序中混合不同版本的Boost(即运行时进程)。

1

如果您正在使用静态增强库来构建动态库,那么静态增强库不会对另一个增强静态或动态库产生副作用。