2013-05-03 3 views
2

У меня есть проект, который использует драйвер MongoDB C++. Поскольку я на WinXP, мне нужно использовать MongoDB 2.0, который использует Boost 1.42. Однако мое приложение использует Boost 1.48.Использование нескольких версий boost

Когда я статически свяжу драйвер MongoDB и создаю свое приложение, я получаю ошибку компоновщика LNK1104, которая отсутствует в libboost_system-vc100-md-gd-1_42.lib. Когда я добавляю эту библиотеку в дополнение к версии 1.48 для библиотеки, я получаю LCK2005 «boost :: system :: throws уже определен» ошибка компоновщика.

Есть ли способ использовать Boost 1.42 в моей статической библиотеке для MongoDB и использовать Boost 1.48 в моем приложении?

+1

Возможный дубликат [одновременное использование двух версий boost] (http://stackoverflow.com/questions/2907882/using-concurrently-2-versions-of-boost) – vitaut

ответ

2

Вы можете разделить процесс сборки: сначала скомпилируйте драйвер MongDB C++ в отдельный .lib при соединении с Boost 1.42.0. Затем на втором этапе вы скомпилируете свое приложение, связанное с библиотекой MongoDB и Boost 1.48.0 , Это должно работать до тех пор, пока MongDB .lib не предоставляет никаких функций повышения, таких как boost::system::throws. См. Это question о том, как ограничить публичный интерфейс при экспонировании символов Boost.

Попробуйте выполнить компиляцию всего приложения только с одной версией Boost (1.42 или 1.48).

+0

Я скомпилирую драйвер в отдельный lib, однако этот вопрос все еще имеет место. – Simon

+0

@Simon см. Обновленный ответ о том, как справляться с утечкой символов Boost из других .libs – TemplateRex

+0

Я пытался избежать изменения всего приложения на ту же версию Boost, но до сих пор это единственное решение. – Simon