La liaison C est le processus de combinaison de plusieurs fichiers objets (.o) et bibliothèques (.a) dans un seul fichier exécutable. Contrairement à la compilation, qui traduit le code source en fichiers objets, la liaison résout les symboles non résolus, déplace les adresses et garantit que l'exécutable final est prêt à être exécuté.
L'une des fonctions cruciales de la liaison est une relocalisation d'adresse. Chaque fichier objet contient des références à des symboles externes, tels que des fonctions et des données déclarées dans d'autres fichiers. Lors de la liaison, l'éditeur de liens calcule l'adresse finale de ces symboles et ajuste les sections de code et de données du fichier objet en conséquence.
Les fichiers objets fournissent des informations de relocalisation à l'éditeur de liens. Chaque entrée de relocalisation comprend l'adresse dans le fichier objet qui doit être déplacé et le symbole cible.
L'éditeur de liens lit les entrées de relocalisation de tous les fichiers objets et bibliothèques. Il résout les symboles non résolus en trouvant leurs définitions dans d'autres fichiers d'entrée ou bibliothèques. Il calcule ensuite les adresses finales de tous les symboles et met à jour les entrées de relocalisation.
Une fois que tous les symboles ont été résolus et que les adresses ont été déplacées, l'éditeur de liens combine les fichiers d'objets individuels en un un seul fichier exécutable. Cet exécutable contient le code et les données nécessaires pour que le programme s'exécute sur la plateforme cible.
Considérez le programme C suivant :
// main.cpp #include <iostream> int main() { std::cout << "Hello, world!" << std::endl; return 0; }
Lorsque ce programme est compilé, il produit deux fichiers objets : main.o et cout.o. Le fichier objet main.o contient le code de la fonction principale, tandis que cout.o contient l'implémentation de << opérateur pour std::cout.
Pendant la liaison, l'éditeur de liens lit les entrées de relocalisation des deux fichiers objets. Il résout la référence à std::cout en trouvant sa définition dans cout.o. L'éditeur de liens met également à jour les références d'adresse dans main.o pour pointer vers l'adresse correcte de std::cout dans le fichier exécutable.
L'exécutable final, nommé a.out, contient le code combiné des deux fichiers objets. et est prêt à être exécuté.
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!