« Programmation C++/Compilation » : différence entre les versions

Contenu supprimé Contenu ajouté
Ropieur (discussion | contributions)
Ligne 8 :
=== Phases de la compilation ===
La compilation passe par différentes phases, produisant ou non des fichiers intermédiaires :
* Préprocessing : Le code source original est transformé en code source brut. Les commentaires sont enlevés et les directives de compilation commençant par <code>#</code> sont d'abord traités pour obtenir le code source brut,.
* Compilation en fichier objet : leles fichiers de code source brut estsont compilétransformés sousen formeun dfichier dit objet, c'est-à-dire un fichier objetcontenant du code machine ainsi que toutes les informations nécessaires pour l'étape suivante (portantédition souventdes liens). Généralement, ces fichiers portent l'extension <code>.obj</code> ou <tt>.o</tt>),.
* Edition de liens : dans cette phase, l'éditeur de liens (linker) s'occupe d'assembler les fichiers objet en une entité exécutable et doit pour ce faire résoudre toutes les adresses non encore résolues, tant des mémoires adressées que des appels de fonction. L'entité exécutable est généralement soit un exécutable, soit une bibliothèque dynamique (DLLs sous windows et toutes les variantes, tels que objet COM, OCX, etc, et les .so sous linux).
* Edition de liens : le fichier objet de l'application est combiné avec ceux des bibliothèques qu'elle utilise. Cette phase finale produit un fichier exécutable, ou une extension d'application (exemples: <code>.dll</code> sous Windows, ActiveX, ...).
 
Les compilateurs sont capables de générer des bibliothèques statiques, qui sont en quelques sortes le rassemblement d'un ensemble de fichiers objet au sein d'un même fichier. Dans ce cas, la phase d'édition de liens n'a pas eu lieu.
 
Cette découpe en phases permet de compiler séparément les bibliothèques en fichiers objets, et l'application. Ceci permet de compiler séparément les différentes parties d'une application, et évite de tout recompiler, ce qui prendrait beaucoup de temps pour les applications ayant un code source important.