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