You are on page 1of 3

Utiliser GNU/Linux

Ce (court) chapitre décrit succinctement des commandes qui peuvent vous être utiles si vous vous essayez à
programmer en utilisant le système d’exploitation Gnu/Linux.

1 Système de fichiers
L’utilisation du shell est monnaie courante avec les systèmes Unix. Le minimum vital à connaı̂tre est :
ls -l beginitemizee les répertoires et fichiers du répertoire courant
cd <dir> va dans le répertoire <dir>
cp <fic1> <fic2> copie <fic1> et appelle la copie <fic2>
mv <fic1> <fic2> déplace <fic1> sous le nom <fic2>
rm <fic> efface le fichier <fic>
pwd affiche le nom du répertoire courant
mkdir <rep> crée le répertoire rep
man <commande> affiche la page de manuel de la commande <commande>

2 Éditer le source
Un éditeur de texte ordinaire convient à l’écriture d’un programme C. Rappelons à cette occasion qu’un éditeur
de texte ordinaire n’est pas un programme de traitement de texte (comme Word ou OpenOffice Writer). Il ne vous
permet pas de créer des titres, ou de faire une table des matières, ce qui n’aurait aucun sens en C.
Les éditeurs servant à programmer sont nombreux sous Gnu/Linux. Pour une prise en main rapide, Scite (com-
mande scite) me semble approprié. Pour une utilisation intensive, mais qui demandera un minimum d’apprentis-
sage, Emacs (commande emacs ou xemacs selon la version que vous avez) reste une référence.

3 Raccourcis clavier pour Emacs



Voici quelques raccourcis clavier qui permettent d’utiliser Emacs plus efficacement. Ceux suivis du symbole sont
spécifiques à vos configurations.
C-x C-s Enregistrer le buffer
C-x C-f Charger / Créer un fichier
C-g Annuler la commande
C-k Couper une ligne
C-y Coller les dernières lignes coupées
C-c C-c Compiler un programme†
C-c C-n Aller à la ligne de l’erreur suivante†

4 Compiler et lier un programme


Nous abordons dans cette section la construction d’un programme exécutable fonctionnel, à partir de fichiers
sources. Cette étapenécessite l’utilisation d’un outil qu’on appelle compilateur. Chaque compilateur comprend un
langage de programmation différent. Il convient donc d’utiliser le compilateur qui correspond au langage dans lequel
le code source est écrit. En ce qui concerne le langage C, nous utiliserons le compilateur gcc. Ce compiteur est
d’ailleurs fort répandu sur d’autre plate-formes que Gnu/Linux.
La transformation d’un code source C en programme exécutable se fait en deux étapes : la compilation, puis
l’édition de liens. Il est important de bien faire la distinction entre les deux.

1
2 Compléments Algo-Prog – Esip 1–

4.1 Compilation
La compilation permet de transformer un fichier contenant du code source en fichier objet. Un fichier contenant du
code source porte généralement l’extension .c, alors qu’un fichier objet a généralement pour extension .o.
La ligne de commande minimale qui permet de transformer le fichier .c en fichier .o est (en supposant que le
fichier source a pour nom toto.c) : gcc -c toto.c Le fichier objet aura alors pour nom toto.o. L’option -c
indique à gcc que l’on ne veut effectuer que l’étape de compilation. Durant cette étape, le compilateur lit le code
source et le transforme en code objet. Il faut par conséquent que votre code source soit parfaitement compréhensible
par le compilateur. La moindre faute de frappe (whole à la place de while par exemple) provoquera une erreur, de
même que l’oubli d’un ; ou une accolade mal placée. Ces erreurs, qui empêchent la compréhension du code source,
sont appelées erreurs de syntaxe. La détection d’une erreur de syntaxe dans le code source empêche le
compilateur de générer le code objet. Si le compilateur comprend votre code source mais pense néanmoins
(généralement à juste titre) que vous avez commis une erreur, il n’indique pas une erreur, mais un avertissement ou
warning. L’émission d’un warning n’empêche pas la génération du code objet, mais il est toujours plus prudent de
corriger la faute probable. Afin d’être mis au courant de tous les warnings trouvés dans votre code, il faut exécuter
la ligne de compilation suivante : gcc -c -Wall toto.c

4.2 Édition de liens


Une fois la phase de compilation terminée (sans erreur et sans warning), on dispose d’un ou plusieurs fichiers objets
d’extension .o. L’édition de liens consiste à lier ces fichiers objets ainsi que d’éventuelles bibliothèques ensemble
afin d’obtenir un seul fichier exécutable : le programme final. Si l’on dispose de deux fichiers objets toto.o et
titi.o et qu’on désire appeler le programme exécutable prog, la commande à entrer est : gcc -o prog toto.o
titi.o Là encore, certaines erreurs peuvent se produire. En particulier, si les deux codes sources toto.o et titi.o
sont nécessaires pour construire le programme exécutable (parce qu’une fonction de toto.o appelle une fonction
qui est écrite dans titi.o par exemple), et que vous entrez la commande : gcc -o prog toto.o l’édition de liens
échouera et gcc vous indiquera que telle fonction n’a pas été trouvée (ce qui est normal si elle figure dans titi.o).
Une erreur d’édition de liens empêche la génération du programme exécutable final.

4.3 Bibliothèques
De nombreuses fonctions utiles ne sont pas incluses dans le langage C de base, comme en particulier certaines
fonctions mathématiques (fonctions trigonométriques par exemple). Le travail de programmation des fonctions
usuelles a néanmoins déjà été effectué et continue sans cesse d’être amélioré. Ces fonctions sont distribuées sous
forme de bibliothèques (une bibliothèque correspond plus ou moins à un fichier objet). Lorsqu’on souhaite utiliser
une fonction qui se trouve dans une bibliothèque, il faut préciser le nom de la bibliothèque lors de l’édition de
liens. La commande : gcc -o prog toto.o -lX11 indique que le fichier objet toto.o utilise des fonctions que l’on
peut trouver dans la librairie X11 (librairie graphique). gcc -o prog toto.o titi.o -lX11 -lm indique que le
programme exécutable prog doit être construit en utilisant les fonctions qui se trouvent dans les fichiers objets
toto.o et titi.o ainsi que dans les bibliothèques X11 et m (fonctions mathématiques).

4.4 Fichiers d’en-tête


En la matière, l’expérience sera votre meilleure amie. Les quelques indices donnés ici ne seront utiles que pour
débuter.
Nous avons vu dans ce chapitre qu’il était habituel de déclarer les fonctions C, sans forcément les définir, avant
leur utilisation dans le code. Ceci permet au compilateur de savoir quels types de paramètres la fonction a besoin
et quel type de valeur elle retourne. Qu’en est-il des fonctions d’une bibliothèque ? Le nom de la bibliothèque étant
donné seulement à l’édition de liens, comment le compilateur fait-il pour connaı̂tre les déclarations des fonctions
lors de la phase de compilation ? Celles-ci sont écrites dans des fichiers spéciaux, qu’on appelle fichiers en-têtes,
et qui ont pour extension .h. Lorsqu’une fonction d’une certaine bibliothèque est utilisée, par exemple la fonction
atan (arctangente) de la bibliothèque mathématique, il faut indiquer dans le code source que cette fonction prend
en paramètre un type double et renvoie un type double. Ces indications sont données dans le fichier d’en-tête de
la bibliothèque mathématique : math.h. Pour indiquer au compilateur1 que les déclarations (nous dirons aussi les
prototypes) de certaines fonctions utilisées sont dans math.h, nous n’avons qu’à ajouter, au début de notre fichier
source : #include<math.h>
1 Encore une inexactitude qui sera réparée avec le temps... l’indication est en fait donnée au préprocesseur C qui n’est pas évoqué

dans ce cours.
3

Dans l’exemple du programme de pgdc donné précédemment nous avons utilisé les fonctions printf et scanf. Ces
fonctions ne font pas partie du C de base, mais d’une librairie, qu’on appelle librairie standard. Il est inutile de
préciser, à l’édition de liens que l’on veut utiliser la librairie standard, celle-ci est toujours incluse. Néanmoins,
les fonctions de cette librairie doivent être déclarées, comme à l’habitude, avant d’être utilisées. Les prototypes de
ces fonctions sont définis dans plusieurs fichiers en-tête. Celui correspondant à printf et scanf est stdio.h. Ceci
explique la présence de la ligne #include<stdio.h> dans le programme.

You might also like