Linux et Compilation

Transcription

Linux et Compilation
Département Informatique
Laboratoires de système d’exploitation
Introduction
Linux et Compilation
par Louis SWINNEN
Ce document est disponible sous licence Creative Commons indiquant qu’il peut être
reproduit, distribué et communiqué pour autant que le nom des auteurs reste présent,
qu’aucune utilisation commerciale ne soit faite à partir de celui-ci et que le document ne soit
ni modifié, ni transformé, ni adapté.
http://creativecommons.org/licenses/by-nc-nd/2.0/be/
La Haute Ecole Libre Mosane (HELMo) attache une grande importance au respect des droits d’auteur.
C’est la raison pour laquelle nous invitons les auteurs dont une oeuvre aurait été, malgré tous nos
efforts, reproduite sans autorisation suffisante, à contacter immédiatement le service juridique de la
Haute Ecole afin de pouvoir régulariser la situation au mieux.
Novembre 2009
1. Introduction
L’objectif de ce document est d’expliquer comment les programmes vont pouvoir être
compilés et exécutés sous Linux.
Toutes les machines sont équipées de Fedora GNU/Linux, qui est une distribution Linux
accessible. Elle peut être téléchargée depuis le site internet http://fedoraproject.org.
Une machine virtuelle compatible VMware est également disponible. Elle contient la
distribution Fedora ainsi que les outils de développement.
2. Organisation du travail
Il est possible de travailler de différentes manières :
1. Editer son fichier avec un programme d’édition classique et compiler « à la main »
son programme
2. Utiliser un éditeur amélioré qui permet de lancer la compilation et l’exécution
3. Utiliser un environnement de développement intégré
Dans la suite, nous allons détailler chacune de ces méthodes.
2.1 Edition et compilation « à la main »
On est amené à travailler de la sorte lorsque :
• Il n’y a aucune interface graphique disponible (utile lorsqu’on travaille à distance sur
un serveur)
• Il n’y a aucun outil de développement, excepté le compilateur, qui est installé.
Pour éditer ou encoder son programme, il existe plusieurs programmes intéressants :
• Si vous êtes en mode texte, les éditeurs joe et vim sont très utiles. Le premier est
probablement plus simple mais également assez limité. Le second s’adresse à des
utilisateurs plus expérimentés.
• Si vous êtes en mode graphique, les éditeurs gedit ou encore gvim sont très
intéressants. Utilisant des fenêtres, ils sont relativement intuitifs.
Pour compiler votre programme, il faut faire appel au compilateur C. Pour se faire, il faut
avoir accès à la ligne de commande et se placer dans le répertoire contenant votre code
pour entrer ( ! remplacer programme par le nom de votre programme):
$ gcc -c *.c
$ gcc *.o -o programme -lpthread
Si aucune erreur n’est signalée, le programme est alors compilé. Pour lancer le programme
compilé, il faut entrer :
$ ./programme
2.2 Utilisation d’un éditeur « amélioré »
Il est possible d’utiliser un « éditeur amélioré » pour compiler et exécuter votre programme.
Sous Linux, on peut utiliser geany. Il faut, auparavant, configurer convenablement cet
éditeur afin que la compilation et l’exécution se passe au mieux.
Linux et compilation
2
Une fois geany démarré, il faut aller, dans le menu Build choisir l’option « Set includes and
Arguments » (ce menu n’est accessible que si vous avez sauvegardé votre fichier en
programme C).
Dans l’option Build, il faut remplacer le texte existant par ceci :
Build : gcc -Wall -o "%e" *.o
Si vous utilisez plusieurs fichiers sources .c, n’oubliez pas de compiler chacun séparément et
puis d’utiliser l’option Build sur le fichier .c contenant votre programme principal.
2.3 Utilisation d’un environnement de développement
De nombreux environnements de développement sont disponibles sous Linux. Ainsi, nous
pouvons, par exemple, citer Code::Blocks. Cet outil est disponible sur la plupart des
plateformes, y compris Linux.
Il faut commencer par créer un projet. Nous créerons uniquement des Console application en
langage C. Il faut également mentionner le répertoire qui contiendra le projet.
Une fois ces options définies, Code::Blocks affiche le projet. Lorsque celui-ci est
complètement déployé, on remarque qu’il a déjà créé un fichier main.c contenant un simple
programme de type Hello World.
Avant de pouvoir réellement travailler, il faut également inclure la librairie pthread. Dans le
menu Settings, choisir Compiler and debugger settings. Choisir ensuite l’onglet Linker
settings. Dans Link libraries, choisir Add puis entrer pthread.
3. Prise en main du compilateur
Exercice 1 : Encodez le programme suivant, compilez-le et exécutez-le.
#include <stdio.h>
#include <string.h>
int main(void)
{
char nomFichier[50+1], ligne[255+1], nom[50+1], prenom[50+1];
int num, groupe, nbElement=0;
FILE* f_in;
printf("Entrez le nom du fichier :"); scanf("%[^\n]%*c", nomFichier);
f_in = fopen(nomFichier, "rt");
printf("Resultat fopen = %p\n", f_in);
scanf("%*c");
nbElement = fscanf(f_in, "%d;%d;%[^;];%[^;];\n", &num, &groupe, nom, prenom);
printf("Nombre d’element identifiés : %d\n", nbElement);
scanf("%*c");
while(!feof(f_in))
{
printf("Nom = %s – Prénom = %s – Groupe = %d\n", nom, prenom, groupe);
nbElement = fscanf(f_in, "%d;%d;%[^;];%[^;];\n", &num, &groupe, nom, prenom);
}
Linux et compilation
3
fclose(f_in) ;
return 0;
}
Exercice 2 : Modifiez le programme précédent et compilez-le à la main.
4. Prise en main du système
Avant de commencer, il est utile de préciser que les pages de manuel sont installées.
Pour y faire appel, il faut utiliser la commande man.
Ainsi, les commandes suivantes fonctionnent parfaitement :
• man ls
donne la page d’information de la commande ls
• man printf
donne la page d’information de la fonction printf
Pour naviguer dans les pages de manuel, il faut savoir que :
• <space> permet de passer à la page suivante
• q
permet de quitter la page de manuel
Exercice 3 : A l’aide des pages de manuels, expliquez les lignes soulignées dans ce
programme.
4.1 Commandes sur les répertoires
ls
Cette commande permet de lister les répertoires et les fichiers.
ls [-l|-a|-h] [fichier...]
Exemples:
$
$
$
$
ls
ls -l
ls -a -l est équivalent à ls -al
ls -la ~
cd
Cette commande permet de changer le répertoire courant
cd [répertoire]
Exemples:
$
$
$
$
$
cd /tmp
pwd
cd ..
cd cd
mkdir
Permet de créer un répertoire
mkdir [-m mode|-p] répertoire...
Exemples:
$ mkdir rep1 rep2
$ mkdir -p rep3/test/exemple doc/louis/linux
Linux et compilation
4
rmdir
Permet de supprimer un répertoire vide
rmdir [-p] répertoire...
Exemples:
$ rmdir rep2
$ rmdir -p rep3/test/exemple
4.2 Commandes sur les fichiers
mv
Cette commande permet de changer le nom d'un répertoire ou d'un fichier. Cette
commande permet également de déplacer un fichier ou un répertoire.
mv [-i] source dest
mv [-i] source... répertoire
Exemples:
$ mv rep1 jef
$ mv jef doc/
cp
Permet de copier un fichier ou un répertoire.
cp [-i | -r] source dest
cp [-i | -r] source... répertoire
Exemples:
$ cp -r /etc doc/jef
$ cp /etc/inittab doc/louis
rm
Permet de supprimer un fichier ou un répertoire
rm [-i | -f | -r] fichier...
Exemples:
$ rm -rf doc/jef
$ rm -i doc/louis/inittab
file
Cette commande permet de connaître le type d'un fichier
file fichier...
Exemples:
$ file /usr/bin/man
$ file /etc/inittab
$ file doc
more et less
Ces commandes permettent de visualiser le contenu d'un fichier texte page par page.
Linux et compilation
5
more fichier
less fichier
Exemples:
$ more /etc/inittab
$ less /etc/inittab
cat
Cette commande permet de fusionner plusieurs fichiers et afficher le résultat sur la
sortie standard (écran, par défaut). Cette commande est également utilisée pour afficher le
contenu d'un fichier à l'écran.
cat fichier...
Exemples:
$ cat /etc/inittab /etc/fstab
find
Cette commande permet d'effectuer une recherche d'un fichier.
find répertoire... expression
Exemples:
$ find / -name man
$ find / -name emacs -exec file {} \;
grep
Cette commande permet de faire une recherche à l'intérieur d'un fichier texte. Elle
affiche les lignes contenant au moins une occurrence de l'expression recherchée.
grep [-r] [-i] "chaîne" fichiers...
Exemples:
$ grep "2345" /etc/inittab
4.3 Les redirections
Le système linux définit 3 flux standards:
•
stdin: l'entrée standard, par défaut attachée au clavier
•
stdout: la sortie standard, par défaut attachée à l'écran
•
stderr: la sortie pour les erreurs, par défaut attachée à l'écran
Chaque commande peut utiliser ces 3 flux standards. Par exemple, lors d'un printf en C, le
résultat est par défaut envoyé sur la sortie standard. Il est possible de rediriger ces flux vers
des fichiers.
Redirection de la sortie standard
Le résultat est alors envoyé dans un fichier.
commande > fichier
commande >> fichier
Linux et compilation
le fichier est créé ou écrasé
le résultat est ajouté au fichier
6
Exemples:
$ ls > out
$ ls -l >> out
Redirection du standard d'erreur
Les messages d'erreurs sont alors envoyés dans un fichier.
commande 2> fichier
commande &> fichier
Redirige le standard d'erreur
Redirige la sortie standard + erreur
Exemples:
$ find / -name emacs 2> find-error
Redirection de l'entrée standard
Les données ne sont plus demandées au clavier et sont prises à partir d'un fichier.
commande < fichier
Exemples:
$ mail root < /etc/inittab
Liens entre plusieurs commandes
L'intérêt majeur des redirections est de pouvoir lier la sortie d'une commande à l'entrée d'une
autre. Les systèmes UNIX permettent de réaliser cela en une seule opération. Il est alors
possible de chaîner plusieurs commandes réalisant des opérations ciblées.
commande1 | commande2
Exemples:
$ cat /etc/fstab | less
$ cat /etc/inittab | grep "2345"
$ cat /etc/aliases | grep "news"
Exercice 4 : Créer un répertoire mes_fichiers
Exercice 5 : Copiez à l’intérieur vos fichiers sources créés à l’étape 1 et 2.
Exercice 6 : Trouvez tous les fichiers qui contiennent le mot int
Linux et compilation
7