ASR4 C sous Unix TD1 La programmation en C sous Unix I U T d ' A m i e n s, d é p a r t e m e n t I n f o r m a t i q u e a n n é e u n i v e r s i t a i r e 2 0 1 0 / 2 0 1 1 A S R 4
Plan A. Préparation du fichier source B. Compilation et édition de liens 14/02/11 ASR4 TD1 T2
A. Préparation du fichier source Utiliser un éditeur de texte classique vi, emacs (console texte) gedit, kwrite (console graphique) Enregistrer sous un nom de fichier avec extension «point c» Revenir à la ligne de commande et bâtir l'exécutable Commande gcc 14/02/11 ASR4 TD1 T3
A. Préparation du fichier source Une alternative : geany 14/02/11 ASR4 TD1 T4
A. Préparation du fichier source 14/02/11 ASR4 TD1 T5
A. Préparation du fichier source 14/02/11 ASR4 TD1 T6
A. Préparation du fichier source 14/02/11 ASR4 TD1 T7
Plan A. Préparation du fichier source B. Compilation et édition de liens 14/02/11 ASR4 TD1 T8
1. La commande gcc La commande gcc... GNU C Compiler issue de la famille gcc GNU Compiler Collection gnat (ada) g++ (C++) gcj (Java) gpc (Pascal) 14/02/11 ASR4 TD1 T9
2. Les fichiers utilisés Un fichier source «point c»... ou plusieurs!!! C'est la compilation séparée Un seul fichier source doit contenir une fonction main Fichier(s) «point c» gcc 14/02/11 ASR4 TD1 T10
2. Les fichiers utilisés Un ou plusieurs modules objet «point o» Contient du code source traduit en binaire #include<stdio.h> main() { printf("vive Unix\n"); } Assemblage 0100101110101010100 0111000101101000111 1111010101110100110 1001000111001010101 0101011110011101010 Fichier source «point c» Module objet «point o» Un module objet n'est pas exécutable! 14/02/11 ASR4 TD1 T11
2. Les fichiers utilisés Des bibliothèques «point a» ou «point so» Collection de modules objet Donc du code en binaire! Fichier(s) «point c» Bibliothèque(s).a.so /lib/libc.so gcc 14/02/11 ASR4 TD1 T12
Bibliothèques statiques Bibliothèque incluse dans le binaire exécutable final plus gourmand en espace disque. 14/02/11 ASR4 TD1 T13
Bibliothèques dynamiques Bibliothèque non incluse dans le binaire exécutable final Attention : doit être présente sur le même ordinateur que l'exécutable! Télé chargée à la demande Partageable entre plusieurs programmes 14/02/11 ASR4 TD1 T14
Notion de bibliothèque #include<stdio.h> Librairie.a 0011101010101001 1101010101111000 1001110101010100 1110101010111100 0100111010101010 0111010101011110 0010011101010101 0011101010101111 0001111010101010 0111010101011110 0010011101010101 0011101010101111 0101010011101010 10 int max(int a, int b) { if(a>b) return a; else return b; } Pollux.c 0011101010101001110101010111 1000100111010101010011101010 1011110001001110101010100111 0101010111100010011101010101 00111010101011110001 Pollux.o 0011101010101001110101010111 1010101011110001001110101010 1001110101010111100010011 Azalee.o 0011101010101001110101010111 1010101011110001001110101010 1001110101010111100010011001 01 Margotte.o 14/02/11 ASR4 TD1 T15
2. Les fichiers utilisés Des fichiers d'entête «point h» Assurent l'interface entre le programmeur et la bibliothèque correspondante Contiennent : Prototypes de fonction (printf dans stdio.h) Définitions de type (FILE dans stdio.h) Constantes macro définies (NULL dans stdio.h) Fichier(s) «point c» Bibliothèque(s).a.so /lib/libc.so gcc Fichier(s) «point h» 14/02/11 ASR4 TD1 T16
Notion de fichier d'entête Pollux.c #include<stdio.h> main() { printf("vive Unix\n"); } Le prototype de printf stdio.h extern int printf ( const char * format,...); Le code en binaire de printf libc.so 001110101010100111010101011110001001110101010100 111010101011110001001110101010100111010101011110 001001110101010100111010101011110001111010101010 011101010101111000100111010101010011101010101111 010101001110101010 14/02/11 ASR4 TD1 T17
A noter! Un fichier d'entête ne contient pas de code source! 14/02/11 ASR4 TD1 T18
2. Les fichiers utilisés L'exécutable obtenu s'appelle «a.out» Raison historique! Fichier(s) «point c» Bibliothèque(s).a.so /lib/libc.so Fichier(s) «point h» gcc Binaire exécutable a.out 14/02/11 ASR4 TD1 T19
3. Les options de compilation de gcc Option «c» Arrêt à la phase d'assemblage Obtention d'un module objet Utile en gestion de projet 14/02/11 ASR4 TD1 T20
3. Les options de compilation de gcc Option «o» Donner un nom à l'exécutable autre que a.out 14/02/11 ASR4 TD1 T21
3. Les options de compilation de gcc Option «Wall» Indique l'intégralité des avertissements de compilation Incontournable! 14/02/11 ASR4 TD1 T22
4. Les options d'édition de liens de gcc Option l<bib> : En plus de la bibliothèque standard /lib/libc.so, inclusion de la bibliothèque lib<bib>.a ou lib<bib>.so Option L<cata> : Recherche des bibliothèques dans le répertoire <cata>, puis dans celui par défaut /lib 14/02/11 ASR4 TD1 T23
5. Exemples gcc source.c Compilation et édition de liens du fichier source.c avec inclusion de la librairie standard /lib/libc.so source.c /lib/libc.so gcc source.c Binaire exécutable a.out 14/02/11 ASR4 TD1 T24
5. Exemples gcc source.c o vroum lm Compilation du fichier source.c en un exécutable nommé vroum, avec inclusion de la bibliothèque mathématique «/lib/libm.so» source.c /lib/libm.so /lib/libc.so math.h gcc source.c o vroum lm Binaire exécutable vroum 14/02/11 ASR4 TD1 T25
5. Exemples gcc c source.c Création d un module objet source.o source.c gcc c source.c Module objet source.o 14/02/11 ASR4 TD1 T26
5. Exemples gcc source.c L$HOME/lib lamoi Compilation du fichier source.c avec inclusion de la bibliothèque statique $HOME/lib/libamoi.a source.c $HOME/lib/libamoi.a /lib/libc.so gcc source.c L... l... Binaire exécutable a.out 14/02/11 ASR4 TD1 T27
6 Le rôle du précompilateur #include : inclusion de fichiers «point h» Recherche dans le catalogue par défaut /usr/include : #include<stdio.h> Recherche dans le catalogue courant : #include "entete.h" Recherche dans un autre catalogue : #include "/home/promo/promo2/include/local.h" 14/02/11 ASR4 TD1 T28