LINUX.ORG.RU

Static vs Shared libs

 


0

1

У меня есть проект, в котором 4 бинарника, к каждому из которых привязывается статическая либа с общими для всех 4 бинарников функциями. Как вы думаете, оставить ее статической или сделать shared? Попрошу аргументированного мнения. Еще такой вопрос - вам нравится куча левых либ в пакетиках в дистре?

★★

Последнее исправление: Athor (всего исправлений: 1)

Все зависит от проекта, если все 4 бинарника идут одним пакетом (обновляются однавременно) - то либу можно смело делать шаред (будет экономия байтиков + слегка ускорится процесс линковки). Если же каждый бинарник живет своей жизнью и иногда есть необходимость обновить только 1 из 4х то с шареной либой можно попасть на проблемы с совместимостью версий (особенно если проект на C++ и в либе экспортируются классы с виртульными методами).

Из плюсов шареной либы: занимает меньше места, быстрей линкуется, если есть баг фикс только в либе - соотвецтвенно перестраивается/обновляется только либа. Из минусов: либу нужно пихать кудато в стандартное место (/lib, /usr/lib) или перед запуском бинарника устонавливать LD_LIBRARY_PATH, могут возникнуть проблемы с версиями - когда у вас в системе появится разные бинарники требующие для корректной работы различные версии библиотеки.

zaz ★★★★
()
Ответ на: комментарий от zaz

© инцеклопедія безрукого плюсофила.

anonymous
()
Ответ на: комментарий от zaz

Это на Vala, так что проблем с экспортом не будет. Мне больше интересно, если все 4 бинарника запущенны одновременно, то будет ли различаться потребление памяти у static и shared?

Athor ★★
() автор топика
Ответ на: комментарий от Athor

Будет - но там копейки (если у вас конечно либа не 1Г). Страницы с сегментом кода в либе будут зашарены между процессами что даст некоторую экономию.

zaz ★★★★
()
Ответ на: комментарий от zaz

Не, либа мелкая. Значит, оставлю static.

Athor ★★
() автор топика
Ответ на: комментарий от anonymous

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

zaz ★★★★
()

Я бы линковал статически.

Waterlaz ★★★★★
()
Ответ на: комментарий от zaz

Из минусов: либу нужно пихать кудато в стандартное место (/lib, /usr/lib) или перед запуском бинарника устонавливать LD_LIBRARY_PATH

-rpath решает

ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.