Maison > développement back-end > C++ > Comment fonctionne la liaison C : des fichiers objets à l'exécutable ?

Comment fonctionne la liaison C : des fichiers objets à l'exécutable ?

Patricia Arquette
Libérer: 2024-12-05 18:48:11
original
961 Les gens l'ont consulté

How Does C   Linking Work: From Object Files to Executable?

Comment fonctionne la liaison C en pratique ?

En C , la liaison est le processus de combinaison de plusieurs fichiers objets (fichiers .o) et bibliothèques (fichiers .a ou .so) dans un seul fichier exécutable (.exe ou .out). L'éditeur de liens résout les références externes entre les fichiers objets et les bibliothèques et crée une table de symboles et d'autres informations nécessaires à l'exécution de l'exécutable.

Comment se produit la liaison ?

  1. Compilation : Le code source est compilé en fichiers objets. Chaque fichier objet contient le code compilé pour une fonction ou un module spécifique, ainsi que des informations sur les symboles (variables, fonctions, classes) définis et référencés au sein de ce module.
  2. Déplacement :Pendant Lors de la liaison, l'éditeur de liens effectue une relocalisation, qui est le processus de modification des adresses des symboles dans les fichiers objets pour qu'elles correspondent aux adresses finales qu'ils auront dans l'exécutable. Ceci est nécessaire car les adresses des symboles peuvent changer lorsque plusieurs fichiers objets sont combinés en un seul exécutable.
  3. Résolution des symboles : L'éditeur de liens résout les références externes entre les fichiers objets et les bibliothèques. Lorsqu'un symbole est référencé dans un fichier objet mais défini dans un autre, l'éditeur de liens trouve la définition et crée un lien entre eux. Cela garantit que l'exécutable peut accéder à tous les symboles dont il a besoin lors de son exécution.
  4. Génération de sortie : Une fois toutes les références externes résolues, l'éditeur de liens crée un fichier exécutable qui contient tous les le code et les données des fichiers objets et des bibliothèques. L'exécutable est alors prêt à être exécuté.

La relocalisation en pratique

Pour illustrer le processus de relocalisation, considérons l'exemple suivant :

// a.cpp
int a = 10;
int main() {
  return a;
}
Copier après la connexion
// b.cpp
int b = 20;
Copier après la connexion

Quand on compile a.cpp et b.cpp, on obtient deux fichiers objets : a.o et b.o. Le fichier a.o contient la définition de la variable a, tandis que b.o contient la définition de la variable b.

Lorsque nous lions a.o et b.o ensemble, l'éditeur de liens doit s'assurer que les références à a et b dans le point final de l'exécutable vers les adresses correctes. Cela se fait en effectuant une relocalisation.

Lors de la relocalisation, l'éditeur de liens modifie les adresses de a et b dans l'exécutable pour qu'elles correspondent à leurs adresses finales en mémoire. Par exemple, si a est alloué à l'adresse 0x1000 et b est alloué à l'adresse 0x2000, l'éditeur de liens modifiera toutes les références à a dans l'exécutable pour pointer vers 0x1000, et toutes les références à b pour pointer vers 0x2000.

Ce processus garantit que l'exécutable peut accéder correctement aux variables a et b lors de son exécution.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal