2017-01-23 2 views
-2

Я понимаю различия между библиотеками только для заголовков, динамически связанными библиотеками (.so файлов, что означает общий объект) и статическими библиотеками (.a как архивы).Типы библиотек Boost

В любом случае, что я не понимаю полностью: почему существуют библиотеки Boost, которые должны быть предварительно скомпилированы и связаны динамически (.so файлов) и библиотеки, которые могут использоваться только со своими заголовками? В чем причина необходимости динамического связывания? Пожалуйста, будьте как можно более конкретными и подробными. :)

С уважением, Zsolt

+1

Насколько я понимаю, невозможно использовать _any_ прекомпилированную библиотеку без заголовков. То же самое можно сказать о '.a' static libs. Вы можете использовать динамические библиотеки, чтобы уменьшить (иногда значительно) размер исполняемого файла, поскольку эти библиотеки распределены независимо и могут быть уже установлены на компьютерах клиентов. Таким образом, вы распространяете только свою программу, но пользователи должны сами получить сами библиотеки. – ForceBru

ответ

1

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

  1. Вы могли бы потребовать глобальную переменную, которая должна быть где-то хранится - самое легкое место, чтобы положить его в свой собственный скомпилированный объект.
  2. Клиенты вашей библиотеки должны использовать его через «интерфейс внешних функций» (FFI), который обычно основан на dlopen() и поэтому требует скомпилированного кода, а не заголовков (которые многие FFI не могут прочитать).
  3. Ваш код имеет значительный размер, возможно, содержащий одну или несколько больших функций. Компиляция только один раз обычно сохраняет время компиляции и размер исполняемого файла.
  4. Вы хотите отправить код, который не отображается в исходной форме, например. задушить обратную инженерию или прямое кражу вашего кода.
Смежные вопросы