Édition de liens statique vs dynamique : les différences expliquées
L'édition de liens associe votre code compilé au code des bibliothèques qu'il utilise. Avec l'édition de liens statique, le code de bibliothèque nécessaire est copié dans l'exécutable à la compilation : le programme est autonome. Avec l'édition de liens dynamique, l'exécutable enregistre seulement les bibliothèques partagées dont il a besoin, et le système d'exploitation les charge au démarrage du programme : de nombreux programmes peuvent ainsi partager une seule copie. Le statique est plus simple à déployer ; le dynamique économise la mémoire et facilite les mises à jour.
| Critère | Édition de liens statique | Édition de liens dynamique |
|---|---|---|
| Moment | À la compilation : le code de bibliothèque est copié dans l'exécutable | Au chargement ou à l'exécution : un éditeur de liens dynamique trouve et mappe les bibliothèques partagées (.so, .dll) |
| Taille de l'exécutable | Plus grande | Plus petite |
| Utilisation mémoire | Chaque programme embarque sa propre copie du code de bibliothèque | Une seule copie d'une bibliothèque partagée peut être partagée par de nombreux processus |
| Mises à jour et correctifs de sécurité | Le programme doit être recompilé et redistribué | On met à jour la bibliothèque une fois ; les programmes en profitent sans recompilation (si l'interface reste compatible) |
| Temps de démarrage | Légèrement plus rapide | Légèrement plus lent : les symboles doivent être résolus (souvent de façon paresseuse) |
| Déploiement | Autonome : fonctionne sans que les bibliothèques soient installées | Nécessite les bonnes versions des bibliothèques sur le système cible, sinon le programme ne démarre pas |
| Coût à l'exécution | Permet l'optimisation globale du programme et les appels directs | Léger surcoût dû aux appels indirects via la GOT et la PLT |
| Problèmes de version | Aucun à l'exécution | Incompatibilités possibles entre le programme et la bibliothèque installée |
| Usages typiques | Firmware embarqué, outils en un seul fichier, conteneurs minimaux | La plupart des programmes sur les systèmes d'exploitation généralistes, plug-ins, bibliothèques système comme la libc |
Les valeurs indiquées sont des ordres de grandeur typiques et varient selon la génération de procédé et le produit.