我有一个使用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已经定义”链接器错误。
有没有办法在我的静态库中为MongoDB使用Boost 1.42,并在我的应用程序中使用Boost 1.48?
最佳答案
您可以拆分构建过程:首先将MongDB C++驱动程序编译为单独的.lib,同时与Boost 1.42.0链接,然后在第二步中,编译您自己的应用程序,并与MongoDB库和Boost 1.48.0链接。只要MongDB .lib不公开任何增强功能(例如boost::system::throws
),这就应该起作用。有关如何限制公共(public)接口(interface)不公开Boost符号的信息,请参见此question。
或者,尝试仅使用一个Boost版本(1.42或1.48)来编译整个应用程序。