Я не буду подробно разбираться в части «медиаплеера», кроме того, что он, очевидно, будет использовать плагины, которые будут представлять собой простую динамическую библиотеку, которая загружается во время выполнения. Теперь я мог бы динамически связывать эти плагины с их зависимостями, или я мог бы связать их статически. Оба имеют свои преимущества и недостатки - я не считаю здесь Linux, так как это будет использовать разделяемые библиотеки.Статические и общие библиотеки для медиаплеера
Единственное преимущество, которое я вижу с использованием общих библиотек, заключается в том, что библиотека может обновляться независимо от программы. В Windows это редко бывает преимуществом, так как библиотека будет рядом с приложением, использующим его (без официального C++ ABI). В Windows, чтобы помочь с уменьшением аддонов DLL и поделиться C-библиотеками, мне пришлось бы использовать SxS, который не очень хороший гражданин.
Что касается статических библиотек, я вижу одно большое преимущество: оптимизация времени ссылки. Те, которые были поддержаны ICC и VC++ уже довольно давно, и у GCC есть филиал для них. Поскольку я, вероятно, буду использовать VC++ в Windows, было бы заметное улучшение производительности, как и у компилятора (ну, фактический «компилятор» просто преобразует C++ в промежуточный язык, поэтому компилятор здесь является «компоновщиком») обладает прекрасным знанием кода и может оптимизировать множество вещей таким образом. Это вариант, к которому я склоняюсь.
Мой вопрос: какой из них был бы лучшим в моем конкретном кейсе?
Нет никаких проблем с другими приложениями, использующими их, поскольку я не считаю Linux в этой проблеме (хотя я не знаю OS X) или нескольких экземпляров (кто-то другой же проигрыватель дважды?), Двоичная совместимость (поскольку я буду распространять все с помощью приложения) или просто обновить (в Windows я буду использовать очень эффективный двоичный патч для распространения обновлений).
Это игрок с открытым исходным кодом. Как динамические библиотеки могут помочь с обновлением? Если вы используете статические библиотеки, как можно обновить свое приложение pdating your xxx до последней версии? Я бы сказал наоборот. – CMircea
Статические библиотеки так же совместимы в обратном порядке, как и общие, поскольку они генерируются из одного источника. Все, что вам нужно сделать, чтобы использовать более новые версии, - это перекомпилировать библиотеки и переосмыслить их - не проблема. Я не вижу, как смещение адресного пространства может повлиять на меня, поскольку плагины будут иметь дизайн обратного вызова (то есть они зависят от приложения, говорящего им делать что-то), и единственной общей зависимостью будет Qt. Возможно, я экспортирую весь общий код приложения в общую библиотеку, чтобы его можно было использовать плагинами, но я не считаю это полезным в этом случае. – CMircea