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