【问题标题】:Using multiple versions of boost使用多个版本的 boost
【发布时间】:2013-04-27 14:29:30
【问题描述】:

我有一个使用 MongoDB C++ 驱动程序的项目。当我在 WinXP 上时,我必须使用 MongoDB 2.0,它使用 Boost 1.42。 但是我的应用程序使用 Boost 1.48。

当我静态链接 MongoDB 驱动程序并构建我的应用程序时,我收到一个 LNK1104 链接器错误,即 libboost_system-vc100-md-gd-1_42.lib 丢失。 当我在应用程序所需的 1.48 库版本之外添加此库时,我收到 LNK2005 “boost::system::throws already defined”链接器错误。

有没有办法在我的 MongoDB 静态库中使用 Boost 1.42 并在我的应用程序中使用 Boost 1.48?

【问题讨论】:

标签: c++ mongodb visual-c++ boost linker-errors


【解决方案1】:

您可以拆分构建过程:首先将 MongDB C++ 驱动程序编译为单独的 .lib,同时链接到 Boost 1.42.0 然后在第二步中编译您自己的应用程序,链接到 MongoDB 库和 Boost 1.48.0。只要 MongDB .lib 不公开任何增强功能,例如boost::system::throws,这应该可以工作。请参阅此question,了解如何限制公共接口公开 Boost 符号。

或者,尝试仅使用一个 Boost 版本(1.42 或 1.48)编译整个应用程序。

【讨论】:

  • 我确实将驱动程序编译到一个单独的库中,但是这个问题仍然存在。
  • @Simon 查看更新后的答案,了解如何处理从其他 .libs 泄漏的 Boost 符号
  • 我试图避免将整个应用程序更改为相同的 Boost 版本,但到目前为止似乎是唯一的解决方案。
  • 我很同情,要是Mongo能兼容最新的Boost就好了
  • 嗯,他们使用 2.2 或 2.4。但是对于 XP,您只能使用 2.0
猜你喜欢
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-03
  • 2012-06-11
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
相关资源
最近更新 更多