Je vais commencer un nouveau projet C++ qui reposera sur une série de bibliothèques, y compris une partie des bibliothèques Boost, le log4cxx ou la bibliothèque de journalisation google - et que le projet évolue autres aussi (que je ne peux pas encore anticiper).Application C++ - dois-je utiliser une liaison statique ou dynamique pour les bibliothèques?
Il devra fonctionner sur les systèmes 32 et 64 bits, plus probablement dans un environnement Linux très diversifié où je ne vous attendez pas à avoir toutes les bibliothèques requises disponibles ni privilèges su.
Ma question est, dois-je construire mon application en reliant dynamiquement ou statiquement à toutes ces bibliothèques?
Notes:
(1) Je suis conscient de la liaison statique peut être une douleur au cours du développement (compilation plus temps, la compilation croisée pour les 32 et 64 bits, en descendant des chaînes de dépendance pour inclure toutes les bibliothèques, etc.), mais c'est beaucoup plus facile pendant le test - il suffit de déplacer le fichier et de courir. D'autre part, les liens de liaison dynamiques sont plus faciles pendant la phase de développement - temps de compilation courts (ne savent pas vraiment comment gérer la liaison dynamique aux bibliothèques 64 bits de mon environnement de développement 32 bits), chaînes de dépendance. De plus, le déploiement de nouvelles versions peut être moche - en particulier lorsque de nouvelles bibliothèques sont requises (voir la condition ci-dessus de ne pas avoir de droits su sur les machines ciblées, ni ces bibliothèques disponibles).
(3) J'ai lu des questions connexes concernant ce sujet, mais ne pouvait pas vraiment savoir quelle approche convient le mieux à mon scénario.
Conclusions:
- Merci à tous pour vos commentaires!
- Je vais probablement aller avec la liaison statique parce que:
- déploiement plus facile
- performances et des résultats plus Prévisible cohérents au cours de perf. les tests (voir cet article: http://www.inf.usi.ch/faculty/hauswirth/publications/CU-CS-1042-08.pdf)
- Comme il est indiqué, la taille et la durée de la compilation de l'électricité statique vs dynamique ne semble pas être une telle différence énorme
- Cycles de test plus faciles et plus rapides
- Je peux garder tous les dev. cycle sur mon dev. Machine
Il le rend également plus robuste après l'installation. Si l'utilisateur installe quelque chose qui change les bibliothèques dynamiques, votre programme ne sera pas affecté. – Jay
Un problème encore très valable avec la liaison statique (et aussi avec les bibliothèques groupées) est que les mises à jour de sécurité nécessaires sont souvent négligées. – wich
Je n'ai pas vu d'améliorations notables dans la vitesse avec la liaison dynamique sur Linux. aller avec statique - c'est plus facile et l'empreinte de la mémoire pour votre application sera plus petite à moins qu'un autre programme ne fonctionne en même temps avec exactement la même dépendance (les bibliothèques dynamiques doivent être chargées dans leur intégralité en mémoire, même si vous seulement utilisez 1 fonction). –