2010-08-26 3 views
2

У меня есть приложение с подключаемой архитектурой, которая использует Boost.Threads как DLL (в частности, инфраструктуру Mac OS X). Я пытаюсь написать плагин, который также использует Boost.Threads, и хотел бы связать его в библиотеке статически. Все строит отлично, но приложение быстро сбой в моем подключаемом модуле, глубоко внутри кода Boost.Threads. Связывание с DLL-версией Boost.Threads, похоже, решает проблему, но я бы хотел, чтобы мой плагин был автономным.Несколько Boost.Thread Экземпляры ОК в приложении C++?

Возможно ли иметь два экземпляра Boost.Threads с такой настройкой (один как DLL, один статически связанный в другой DLL)? Если да, то что я могу потерять, чтобы сделать два экземпляра?

+0

Какая версия boost и как вы создали Boost.Thread? –

+0

В настоящее время Boost 1.37. Первый был создан как основа на Mac, а второй был скомпилирован как источник в плагин (другая DLL/фреймворк). – fbrereto

ответ

1

Как только моя команда столкнулась с подобной проблемой. По причинам, которые я не буду упоминать в это время, нам пришлось разработать систему, в которой использовались две разные версии Boost (потоки, система, файловая система).

Идея, с которой мы столкнулись, заключалась в том, чтобы захватить исходный код обеих версий Boost, в которых мы нуждались, а затем настроить один из них, чтобы изменить символы и имена функций, чтобы избежать столкновения имени.

Другими словами, мы заменили все ссылки на имя повышающего для пузырей внутри источников (или другое название), а также внес изменения в проект так, что будет строить libbubbles вместо libboost ,

Эта процедура предоставила нам 2 набора библиотек, каждая из которых имеет свои собственные двоичные файлы и файлы заголовков.

Если посмотреть на исходный код нашего приложения вы увидите что-то вроде:

#include <bubbles/thread.hpp> 
#include <boost/thread.hpp> 

bubbles::thread* thread_1; 
boost::thread* thread_2; 

Я полагаю, некоторые из ребят здесь уже сталкивался с подобной ситуацией. Вероятно, есть лучшие альтернативы тому, который я предложил выше.

 Смежные вопросы

  • Нет связанных вопросов^_^