библиотека с закрытым исходным кодом включает ускоренное распространение

Я использую библиотеку с закрытым исходным кодом (от Activ Financial), которая включает в себя API-интерфейс boost, как некоторые файлы заголовков boost, так и файлы библиотеки boost.

Я также использую Boost в своей существующей кодовой базе, и мне нужно использовать Activ из моего существующего кода.

Некоторые моменты

  • Я могу инкапсулировать использование Activ так, чтобы вся часть Activ равнялась одному написанному мной классу, который не раскрывает ни один из заголовков Activ.
  • Этот единственный заголовочный файл ничего не использует.
  • Таким образом, я могу убедиться, что части моего кода Activ используют файлы Activ Boost HPP, а мой код использует файлы HPP Boost.

Мое беспокойство приходит в связи. Как я могу убедиться, что мой код, зависящий от Activ, связан с Activ Boost, а другой мой код связан с моим Boost?

Сейчас я использую g++, также буду делать это в VS2008. Раньше у меня это работало в VS2008, но я понятия не имею, как все связано. Я хочу попробовать убедиться, что это сделано правильно.

Есть ли способ сделать это без дальнейшей инкапсуляции части Activ в динамическую библиотеку?

Редактировать:

Во-первых, мой конечный продукт всегда представляет собой исполняемый файл. На двоих я статически линкуюсь, чтобы бустить себя. Библиотека Activ включает в себя как статическую, так и динамическую версии библиотек объектов Boost, и я планирую связать ее статически.

Я никогда не передаю объекты Boost между кодами, использующими разные версии Boost.

Вопрос в том, как связать один файл cpp или .o с объектами в одном файле библиотеки, а затем убедиться, что другие файлы .o связаны с идентичными объектами в другом файле библиотеки. ? Это возможно?


person Scott    schedule 01.12.2010    source источник


Ответы (1)


Связывается ли библиотека с Boost динамически или статически? Если библиотека статически связана, предоставляет ли библиотека символы в DLL (экспорт declspec)?

Если библиотека статически связана и символы не отображаются, и вы не передаете туда и обратно какие-либо структуры данных Boost (smart_ptr, потоки и т. д.), скорее всего, вы можете безопасно использовать свою собственную версию библиотеку Boost в вашей DLL.

person Yann Ramin    schedule 01.12.2010
comment
Смотрите мою правку. В принципе, кажется, мне нужен хак при связывании. У меня есть две библиотеки объектов (каждая версия Boost) с идентичными символами, но неидентичным кодом для этих символов, и мне нужно убедиться, что каждый из моих файлов .o ссылается на правильные файлы Boost .a. Насколько мне известно, связывание может быть выполнено только в конце, поэтому я не уверен, что делать. (Для включаемых файлов проблема проще, так как я могу просто скомпилировать каждый файл cpp с другой директивой -I в gcc.) Правильно ли я об этом думаю? - person Scott; 01.12.2010