Boost - «статические» и «общие» библиотеки - PullRequest
3 голосов
/ 16 сентября 2009

Я создаю библиотеки «boost» из исходного кода boost, и у меня есть два варианта: сделать его «статическим» или «общим» (например, динамическим). Какая идея лучше?

Я предпочитаю динамическое (разделяемое) соединение, но когда я пытался создать общие библиотеки boost (в Ubuntu Linux), я получал много ошибок или предупреждений (почему всегда есть ошибки, предупреждения, заметки и другие вещи при компиляции, grrrrrrrr) так что я не знаю, скомпилировано ли это хорошо?

Спасибо.

Ответы [ 4 ]

7 голосов
/ 16 сентября 2009

Лучше субъективно. Совместное использование сокращает размер, рискуя зависимостями. Static решает проблемы с зависимостями, но увеличивает их размер.

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

4 голосов
/ 16 сентября 2009

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

Что касается проблемы с зависимостями, то можно связать ее с определенной версией разделяемой библиотеки или разместить ваши разделяемые библиотеки в специальном месте, которое является специфическим для вашей программы - что не экономит ваше пространство, но что дает вам гибкость, связанную с общими библиотеками, так что это не должно быть причиной для выбора статических библиотек над общими библиотеками. На самом деле мне трудно создать один экземпляр на типичном настольном компьютере, ноутбуке или серверном компьютере, где использование статических библиотек лучше, чем использование общих библиотек.

P.S. Если вы пытаетесь установить Boost на Ubuntu Linux, просто запустите "sudo apt-get install libboost1.37-dev". Вы, вероятно, получали ошибки, потому что вы не установили все зависимости Boost. Они автоматически загружаются и устанавливаются, когда вы используете менеджер пакетов apt-get в Ubuntu для его установки. Кроме того, обычно лучше использовать менеджер пакетов ОС для установки программных пакетов, чем для сборки из исходного кода. Например, использование версии Boost для системы пакетов повысит вероятность того, что ваше программное обеспечение будет работать без проблем в других развертываниях Ubuntu Linux, в которых используется версия Boost для менеджера пакетов.

P.P.S. Boost использует некоторые очень продвинутые функции C ++. Это как бы толкает C ++ до предела. Нередко появляются предупреждения при компиляции Boost. На самом деле, я много раз собирал Boost для разных операционных систем, и я не помню, чтобы не было предупреждений.

2 голосов
/ 18 сентября 2009

Рекомендуемый способ использования библиотек Boost C ++ в Linux - через общие ссылки. На коробке Ubuntu Linux, уже настроенной для разработки, вы не должны получать никаких ошибок вообще. Ожидаются предупреждения компиляции - для различных проблем, связанных с мышлением, техническими проблемами и ограничениями по времени, их несколько. Поскольку обычное тестирование релизов охватывает Ubuntu, я не стал бы беспокоиться о функциональности созданных библиотек - если есть .so, он должен работать.

2 голосов
/ 16 сентября 2009

Статические библиотеки используются, когда вам не нужно динамически загружать компонент в программу. Он скомпилирован в exe.
Общая библиотека загружается во время выполнения и обычно используется для плагинов или расширений.
Мне кажется, здесь лучше использовать статическую библиотеку, так как вы, вероятно, в любом случае загрузите совместно используемую библиотеку boost при запуске программы.
Почему вы предпочитаете общую библиотеку?

...