Je ne vais pas entrer dans les détails sur la partie "lecteur multimédia" sauf le fait qu'il utilisera évidemment des plug-ins, qui seront une simple bibliothèque dynamique chargée lors de l'exécution. Maintenant, je pourrais relier dynamiquement ces plug-ins à leurs dépendances, ou les relier statiquement. Les deux ont leurs avantages et leurs inconvénients - je ne compte pas Linux ici, car cela va utiliser des bibliothèques partagées.Bibliothèques statiques ou partagées pour un lecteur multimédia
Le seul avantage que je vois avec l'utilisation de bibliothèques partagées est que la bibliothèque peut être mise à jour indépendamment du programme. Sous Windows, ceci est rarement un avantage, car la bibliothèque sera à côté de l'application qui l'utilise (grâce à l'absence d'ABI C++ officiel). Sous Windows, pour aider à réduire l'enfer des DLL et partager les librairies C, je devrais utiliser SxS, ce qui n'est pas vraiment un bon citoyen. En ce qui concerne les bibliothèques statiques, je vois un grand avantage: les optimisations de temps de liaison. Ceux-ci ont été soutenus par ICC et VC++ depuis un certain temps maintenant et GCC a une branche pour eux. Comme j'utiliserai probablement VC++ sous Windows, il y aurait une amélioration notable des performances du compilateur (enfin, le "compilateur" actuel convertit simplement C++ en un langage intermédiaire, donc le compilateur ici est le "linker"). code et peut optimiser beaucoup de choses de cette façon. C'est l'option que je penche vers.
Ma question est, laquelle serait la meilleure dans mon cas spécifique? Il n'y a pas d'autres applications qui les utilisent car je ne compte pas Linux dans ce numéro (bien que je ne connaisse pas OS X) ou plusieurs instances (qui exécute deux fois le même lecteur multimédia?), Compatibilité binaire (comme je vais tout distribuer avec l'application) ou facile de mise à jour (sur Windows je vais utiliser un binaire diff très efficace pour distribuer les mises à jour).
C'est un lecteur open-source. Comment les bibliothèques dynamiques peuvent-elles aider à la mise à jour? Si vous utilisez des bibliothèques statiques, comment la mise à jour de votre "publication de votre bibliothèque xxx vers la dernière version" peut-elle interrompre mon application? Je dirais l'inverse. – CMircea
Les bibliothèques statiques sont aussi rétrocompatibles que les bibliothèques partagées, car elles sont générées à partir de la même source. Tout ce que vous devez faire pour utiliser les versions plus récentes est de recompiler les bibliothèques et de les relier - ce n'est pas vraiment un problème. Je ne vois pas comment le décalage d'espace adresse peut m'affecter puisque les plug-ins auront une conception de rappel (c'est-à-dire que l'application leur dit de faire des choses) et la seule dépendance commune sera Qt. Peut-être que je vais exporter tout le code de l'application générique dans une bibliothèque partagée afin qu'elle puisse être utilisée par les plug-ins, mais je ne trouve pas cela vraiment utile dans ce cas. – CMircea