2011-01-29 3 views
3

Je suis nouveau au C++ et essaie de tout comprendre. Je sais que le Linker lie le fichier objet à des fichiers externes. Correct? Le lieur lie-t-il les préprocesseurs? ou juste des fichiers supplémentaires? Par exemple dans un simple programme Hello World. Par exemple:Confus au sujet du Linker en C++

L'éditeur de liens pourrait-il être lié à mon programme Hello World?

+3

Je dois dire que je suis très affectueux pour wikipedia 'http://en.wikipedia.org/wiki/Linker_ (informatique)', et bien sûr le lien est maintenant rompu :( – Marlon

+0

@Marlon: Parce que vous l'avez enveloppé Tags: code collant (backticks) Coller dans le lien nu aurait très bien fonctionné –

+0

@Cody, je devais le poster dans les tags de code car il cassait quand je l'ai collé: P – Marlon

Répondre

0

Linker relierait la bibliothèque et les fichiers .o. Le compilateur va générer les fichiers .o. le préprocesseur serait traité dans le processus de compilation.

Par exemple

étape 1: compiler: g ++ -c relatedFile.cpp

étape 2: Lien: g ++ -o Proname relatObjFile.o (bibliothèque externe)

+0

Hey Sean, j'ai aimé votre explication. – USDblades

1

En résumé général très , la fonction principale de l'éditeur de liens consiste à empaqueter votre programme Hello World avec toutes les routines de bibliothèque que vous avez appelées dans votre programme, comme prinf, dans un fichier exécutable prêt pour l'OS à charger en mémoire et recevoir le transfert de contrôle. Cet emballage crée la disposition du code dans l'espace d'adressage du programme. Dans le cadre de cette tâche, il est nécessaire que l'éditeur de liens "résolve" les symboles dans votre code, par exemple en affectant au symbole un décalage d'adresse dans l'image exécutable. L'éditeur de liens crée également une table de relocalisation qui contient des pointeurs vers certains symboles globaux qui doivent être des adresses mémoire absolues. Comme les adresses de mémoire absolues ne peuvent pas être connues au moment de la liaison, elles sont déterminées au moment du chargement par le chargeur du système d'exploitation, et les images exécutables sont ensuite corrigées avec les adresses absolues correctes avant le transfert du contrôle.