Partage de technologie

Comment fonctionne l'éditeur de liens, la différence entre les liens statiques et les liens dynamiques, comment créer et utiliser des bibliothèques de liens dynamiques

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

L'éditeur de liens joue un rôle essentiel dans le développement de programmes. Il est responsable de l'intégration de plusieurs fichiers objets et fichiers de bibliothèque dans un fichier exécutable. Avant d'aborder le fonctionnement de l'éditeur de liens, la différence entre les liens statiques et les liens dynamiques, et comment créer et utiliser des bibliothèques de liens dynamiques, décrivons d'abord les fonctions de base de l'éditeur de liens.

Comment fonctionne l'éditeur de liens

Éditeur de liens Il s'agit d'un outil chargé de combiner un ou plusieurs fichiers objets et fichiers de bibliothèque en un fichier exécutable. Ses principales fonctions comprennent :

  1. Analyse de symboles : Identifiez et traitez tous les symboles (noms de fonctions et de variables) dans le programme, en vous assurant que chaque symbole a une définition unique. Pour les symboles référencés mais non définis (symboles externes), l'éditeur de liens recherche une définition dans une bibliothèque fournie ou dans un autre fichier objet.

  2. réinitialiser : Ajustez les adresses de code et de données dans chaque module à l'adresse mémoire finale. La relocalisation inclut la correction d'adresse dans le code et l'ajustement de la position du segment de données pour garantir que toutes les références pointent vers l'emplacement mémoire correct.

  3. fusionner des segments: Fusionnez des segments du même type (tels que des segments de code, des segments de données, etc.) de différents fichiers cibles en un seul segment continu.

  4. bibliothèque de traitement : Liez le code de bibliothèque requis par le programme avec le fichier objet. L'éditeur de liens peut gérer deux types de bibliothèques : les bibliothèques statiques et les bibliothèques dynamiques.

  5. Générer un fichier exécutable: La sortie finale est un fichier exécutable qui peut être exécuté sur le système d'exploitation.

La différence entre les liens statiques et les liens dynamiques

Liaison statique etLiaison dynamique Il s'agit de deux modes de fonctionnement de l'éditeur de liens, chacun avec des caractéristiques et des scénarios d'utilisation différents.

lien statique
  • concept : Dans la liaison statique, le code de la bibliothèque est copié au moment de la compilation et intégré dans chaque exécutable qui l'utilise. De cette façon, le fichier exécutable généré contient tout le code requis et ne repose pas sur des fichiers de bibliothèque externes.

  • avantage

    • Forte indépendance : le fichier exécutable généré contient toutes les dépendances et ne nécessite pas de fichiers de bibliothèque supplémentaires au moment de l'exécution.
    • Bonne compatibilité : le runtime ne dépend pas de la version de la bibliothèque installée dans le système, et ne rencontrera pas de problème de « conflit de version de bibliothèque ».
  • défaut

    • Taille de fichier importante : chaque fichier exécutable contient le code de bibliothèque complet, ce qui entraîne une augmentation de la taille du fichier.
    • Problème de mise à jour : si la bibliothèque est mise à jour, tous les programmes qui utilisent la bibliothèque doivent être recompilés.
  • Extension de bibliothèque statique

    • Les fenêtres: .lib
    • Unix/Linux : .a
lien dynamique
  • concept : Dans la liaison dynamique, le code de la bibliothèque est chargé au moment de l'exécution et n'est pas intégré dans le fichier exécutable. L'exécutable contient uniquement des références aux bibliothèques et le code de la bibliothèque est chargé par le système d'exploitation au moment de l'exécution.

  • avantage

    • Petite taille de fichier : le fichier exécutable ne contient pas de code de bibliothèque, uniquement des références à la bibliothèque.
    • Facile à mettre à jour : la mise à jour des bibliothèques ne nécessite pas de recompiler le programme, il suffit de remplacer les fichiers de la bibliothèque.
    • Efficacité élevée de la mémoire : plusieurs programmes peuvent partager des instances de mémoire du même fichier de bibliothèque, réduisant ainsi l'utilisation de la mémoire.
  • défaut

    • Dépendances fortes : le fichier exécutable doit être capable de trouver et de charger la version correcte du fichier de bibliothèque lors de son exécution.
    • Problèmes de compatibilité : une incompatibilité de version du fichier de bibliothèque peut entraîner l'échec du programme.
  • Extension de bibliothèque dynamique

    • Les fenêtres: .dll(Bibliothèque de liens dynamiques)
    • Unix/Linux : .so(Objet partagé)

Créer et utiliser des bibliothèques de liens dynamiques

Créer une bibliothèque de liens dynamiques

Sur différents systèmes d'exploitation, les méthodes de création de bibliothèques de liens dynamiques sont légèrement différentes. Voici quelques étapes et commandes courantes :

Créer une bibliothèque de liens dynamiques sous Linux
  1. Écrire le code de la bibliothèque

    Créez un fichier source C contenant les fonctions que nous souhaitons placer dans la bibliothèque dynamique.

    // example.cpp
    #include