Editeur de texte ® module source :
texte compréhensible
® PREPROCESSEUR +
en-têtes ® module source précompilé : lisible
® compilateur ® module objet binaire
® EDITEUR DE LIENS + bibliothèques ® exécutable
En-têtes
: fichiers textes
En
C++ : fichiers .h
·
n'existe pas toujours
·
quand il existe, il
prépare le fichier pour le compilateur.
Editeur de texte ® module source :
texte compréhensible
® compilateur ® module objet : binaire
® EDITEUR DE LIENS + bibliothèques ® exécutable
Rq : le module objet dépend du SE Þ recompiler lors d'un chgt de SE
Bibliothèques = modules objets, binaire non lisible
méthodes
fonctions
sur support disques par ex.
xlC,
g++, cob = uitlitaires, avec préprocesseur, compilateur, éditeur de
liens
Editeur de texte ® module source :
texte compréhensible
® PREPROCESSEUR + en-têtes ® module source précompilé : lisible
® compilateur ® code intermédiaire
® INTERPRETEUR +
bibliothèques
·
ni lisible, ni binaire
·
universel
·
transite sur le réseau
analyse le code
lance l'exécution ligne par ligne
EDITEUR DE TEXTE ® module source
® INTERPRETEUR
Cmde : ksh prog
![]()
module source
PREPROCESSEUR module source
![]()
![]()
précompilé
en-têtes
·
logiciel spécifique
·
traite le fichier source
·
manipule des chaînes de
caractères
·
élimine les commentaires
C++ : commencent par //
·
inclus les
fichiers sources
C++ : les # include xxx.h sont remplacés par le code source
·
substitution de texte = macrogénérations de code
C++ : les # define xxx substituent les xxx
·
compilation
conditionnelle
·
donne un module source
précompilé
Directives
préprocesseur
C++
: commencent par #
SQL
: commencent par execsql
xlC
–P nom-prog.C
#define
nom-macro[(paramètres)] [texte-macro]
® remplace la chaîne nom-macro par la chaîne
texte-macro
jusqu'à
rencontrer
#undef
nom-macro
#include
<nom-fichier.h>
® fichier du répertoire standard
#include
"nom-fichier.h"
® fichier du répertoire courant
·
prototypes de fonctions
·
définition de types (
#define)
Rq : le code
source des fichiers en-têtes en volumineux Þ en inclure le moins possible
xlC –P –InomRép
nom_fic_à_inclure –InomRép nom_fic_à_inclure
(-Include)
|
.h |
en-tête |
|
.i |
précompilé |
|
.o |
module objet |
COMPILATION CONDITIONNELLE
#ifdef constante // #ifndef constante
instructions…
#else
instructions…
#endif
Le compilateur génère un fichier différent selon que
les constantes sont définies ou pas
But : paramétrer
le préprocesseur
xlC –P
–DnomConstante nomProg
(-Define)
Utilité
compiler
un même programme sur des machines difftes
contrôler
les impressions intermédiaires
#define constante Þ #ifdef
constante V
![]()
![]()
![]()
![]()
précompilé COMPILATEUR
module objet
construit un module objet à partir du source
précompilé
analyse les instructions
mot-clés
ponctuation
cohérence (var
utilisée doit être déclarée)
= code
machine correpondant au code source
·
En-tête
Header =
infos générales système sur lequel on a compilé
·
Code des instructions .txt
·
Infos sur les variables
globales .bss
·
Table des symboles relogeables
Relocation Table = liste de toutes les fonctions utilisées dans le prog
En clair :
|
|
déclaré |
utilisé |
code |
|
f(char) |
oui |
instr n°43 |
oui |
|
sin( ) |
oui |
instr n°56 |
non |
·
Table des symboles
= Symbol Table recense toutes les déclarations
En clair :
|
|
déclaré |
type |
utilisé |
|
i |
oui |
entier |
instr n°56 |
|
j |
non |
|
instr n°57 |
Compiler, arrêt après compilation
xlC –c nomProg.C
Aperçu module objet
dump nomModule.o
Rq : le
module objet ne contient pas le code des fonctions des bibliothèsuqes std.
module(s) objet(s)
![]()
EDITEUR DE LIENS
exécutable
![]()
bibliothèques
Bibliothèque
= ens. de modules objets = code des fonctions std ou utilisateurs
·
fait des recoupements
sur les tables de symboles relogeables des diffts modules objets (est-ce que le
code de telle fonction est présent dans telle table alors qu'il est absent de
telle table ?)
·
le code est contenu dans
les bibliothèques
= ens. de modules objets
libpath
= var d'environnement
contient tous les noms des bibliothèques et les
chemins d'accès
Path =
chemin
lib pour library = bibliothèque
libNomBibli.a
Attn : il
faut créer les modules objets correspondants
ar option NomBibli listeModObjets
Options :
[-d] delete [-q] ajout en fin [-r] replace
[-t] liste [-v] compte-rendu des opés faites [-x] extraction des modules et
recopie dans le cd