Maison  >  Article  >  Opération et maintenance  >  Quelle est la différence entre les liens dynamiques et les liens statiques sous Linux

Quelle est la différence entre les liens dynamiques et les liens statiques sous Linux

青灯夜游
青灯夜游original
2022-02-25 16:02:403600parcourir

Différence : 1. La liaison statique est effectuée avant la formation du programme exécutable, tandis que la liaison dynamique est effectuée lorsque le programme est exécuté ; 2. La vitesse de chargement du code de la bibliothèque de liens statiques est rapide et la vitesse d'exécution est légèrement plus rapide que celle-ci. celui de la bibliothèque de liens dynamiques ; 3. Par rapport à la liaison dynamique, le fichier exécutable généré par la liaison statique est plus volumineux.

Quelle est la différence entre les liens dynamiques et les liens statiques sous Linux

L'environnement d'exploitation de ce tutoriel : système linux5.9.8, ordinateur Dell G3.

Lien dynamique et lien statique sous Linux

Le processus de compilation et de liaison

La compilation est divisée en 3 étapes. Tout d'abord, prétraitez le fichier source. Ce processus traite principalement certaines commandes ou instructions définies par #. . (Comme les macros, #include, les instructions précompilées #ifdef, etc.), générer des fichiers *.i ; puis compiler, ce processus effectue principalement une analyse lexicale, une analyse syntaxique et une analyse sémantique, etc. enfin, effectuez l'assemblage, ce processus est relativement simple, qui consiste à traduire les instructions d'assemblage correspondantes en instructions machine et à générer un fichier objet binaire délocalisable.

Deux façons de créer un lien

  • Lien statique

  • Lien dynamique

La plus grande différence entre le lien statique et le lien dynamique est que le moment du lien est différent. Le lien statique est formé avant le. programme exécutable, la liaison dynamique se produit lorsque le programme est exécuté.

Avantages de la bibliothèque de liens statiques

a) : La vitesse de chargement du code est rapide et la vitesse d'exécution est légèrement plus rapide que celle de la bibliothèque de liens dynamiques

b) : Il vous suffit de vous assurer qu'il y a le bon . lib sur l'ordinateur de développement, puis lors de la distribution d'un programme sous forme binaire, il n'est pas nécessaire de se demander s'il existe un problème de version avec le fichier .lib sur l'ordinateur de l'utilisateur, et des problèmes tels que l'enfer des DLL peuvent être évités.

Avantages des bibliothèques de liens dynamiques

a) Économisez plus de mémoire et réduisez l'échange de pages ;

b) Les fichiers DLL sont indépendants des fichiers EXE, tant que l'interface de sortie reste inchangée__ c'est-à-dire le nom, les paramètres et la valeur de retour. type et convention d'appel Aucun changement__, le remplacement du fichier DLL n'aura aucun impact sur le fichier EXE, améliorant ainsi considérablement la maintenabilité et l'évolutivité

c) Les programmes écrits dans différents langages de programmation peuvent appeler le même programme tant qu'ils suivent ; les fonctions DLL de la convention d'appel de fonctions ;

d) conviennent au développement de logiciels à grande échelle, rendant le processus de développement indépendant et moins couplé, et facilitant le développement et les tests entre différents développeurs et organisations de développement.

Inconvénients

a) Le fichier exécutable généré à l'aide de liens statiques est plus grand et contient le même code commun, ce qui entraîne du gaspillage.

b) Les applications utilisant des bibliothèques de liens dynamiques ne sont pas auto-complètes et reposent sur le module DLL ; doit également exister. Si vous utilisez la liaison dynamique au moment du chargement et qu'il s'avère que la DLL n'existe pas au démarrage du programme, le système mettra fin au programme et affichera un message d'erreur. Avec la liaison dynamique d'exécution, le système ne s'arrêtera pas, mais le programme ne pourra pas se charger car les fonctions exportées dans la DLL ne sont pas disponibles ; la vitesse est plus lente que la liaison statique. Lorsqu'un module est mis à jour, si le nouveau module est incompatible avec l'ancien module, tous les logiciels nécessitant l'exécution du module seront supprimés. C'était courant au début de Windows.

Recommandations associées : "Tutoriel vidéo Linux"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn