библиотека с закрытым исходным кодом включает в себя расширенное распространение - PullRequest
9 голосов
/ 01 декабря 2010

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

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

Некоторые точки

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

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

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

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

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

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

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

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

1 Ответ

3 голосов
/ 01 декабря 2010

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

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

...