Я собираюсь начать новый проект на С++, который будет опираться на ряд библиотек, включая часть библиотек Boost, log4cxx или библиотеку ведения журнала Google, а также, когда проект развивает и другие (что я не могу но предвидеть).
Он должен работать как на 32, так и на 64-битных системах, скорее всего, в довольно разнообразной среде Linux, где я не ожидаю наличия всех необходимых библиотек и привилегий su.
Мой вопрос: должен ли я создавать свое приложение динамически или статически связываться со всеми этими библиотеками?
Примечания:
(1) Я знаю, что статическая привязка может быть болью во время разработки (более длительное время компиляции, кросс-компиляция как для 32, так и для 64-битных, снижение цепочек зависимостей для включения всех библиотек и т.д.), но это намного проще во время тестирования - просто переместите файл и запустите.
(2) С другой стороны, динамические связующие швы легче на этапе разработки - короткие времена компиляции (на самом деле не знают, как обращаться с динамической привязкой к 64-битным библиотекам из моей 32-разрядной среды dev), без суеты с зависимостью цепей. Развертывание новых версий, с другой стороны, может быть уродливым - особенно когда требуются новые библиотеки (см. Условие выше, не имеющее прав su на целевых компьютерах, и эти библиотеки не доступны).
(3) Я прочитал связанные вопросы по этой теме, но не мог понять, какой подход лучше всего подходит для моего сценария.
Выводы:
- Спасибо всем за ваш вклад!
- Я, вероятно, поеду со статической связью, потому что:
- Более легкое развертывание
- Предсказуемая производительность и более последовательные результаты во время исполнения. (см. эту статью: http://www.inf.usi.ch/faculty/hauswirth/publications/CU-CS-1042-08.pdf)
- Как уже отмечалось, размер и продолжительность компиляции статического и динамического типов, по-видимому, не столь велики.
- Простые и быстрые циклы тестирования
- Я могу держать всех разработчиков. цикл на моем dev. машина