C ++: привязка внешней библиотеки к библиотеке dll - PullRequest
3 голосов
/ 21 февраля 2020

В настоящее время я разрабатываю общую библиотеку на Windows (dll) с c++. Библиотека зависит от другой внешней библиотеки.

Какой лучший способ связать их вместе?

  • Связать внешнюю библиотеку как библиотеку stati c с моей общей библиотекой?
  • Свяжите ее как общую библиотеку и предоставьте dll приложению, которое использует мою общую библиотеку?

Во втором случае, что произойдет, если я создаю приложение, которое использует мою Собственная созданная общая библиотека, а также внешняя библиотека в качестве общей библиотеки?

Если, например, моя общая библиотека создается с версией внешней библиотеки 1.1 и приложение использует более новую версию, например 1.3? Теперь dlls должен отличаться, но как я могу предоставить их основному приложению?

Существуют ли передовые практики или рекомендации, как справиться с такой ситуацией?

1 Ответ

0 голосов
/ 21 февраля 2020

Это действительно зависит от того, что вы хотите сделать, и от того, как вы развертываете свою библиотеку.

shared / dynamici c библиотеки (библиотеки DLL на windows) имеют ряд преимуществ перед stati c библиотеками

  • Они могут распространяться извне из приложения, позволяя вашему бинарному приложению быть меньше
  • Они могут обновляться внешне для приложения
  • Они немного более эффективны, чем код выполняется только при необходимости, а не в комплекте с исполняемым файлом

Конечно, у них тоже есть несколько недостатков

  • Они могут распространяться извне из вашего приложения и обновляться извне - разрешить атаки с использованием dll-инъекций
  • Попытка освободить динамические c библиотеки с помощью исполняемого файла - одна из самых болезненных и ужасных вещей (особенно на windows, где отсутствует RPATH)

Вы можете иметь для использования DLL, в зависимости от лицензирования вашей внешней библиотеки, Qt для экзамена Во многих случаях требуется соединение с общей библиотекой (не во всех).

Стандартным соглашением обычно является предоставление совместно используемой и stati c версий вашей библиотеки, при этом совместно используемая версия полностью связывается с другими общими библиотеками, а версия stati c представляет собой ar stati c. (включает в себя все зависимости). Затем вариант совместно используемой библиотеки предлагает инструкции по компоновке (т. Е. Файл .pc (pkgconfig)), в котором указываются версии других библиотек для ссылки (т. Е. v1.1 из x.dll) для успешной компиляции / компоновки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...