Environnement de développement

Documents pareils
Cours Langage C/C++ Programmation modulaire

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Systeme d'exploitation

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Introduction au langage C

Dossier. Développer en Java sur téléphone mobile. Benjamin Damécourt UFR SITEC Master 2 EESC 11 janvier 2012

Ateliers Python+Qt : Premiers pas : S'installer pour PyQt... en quelques minutes sous Windows!

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Environnements de développement (intégrés)

Outils pour la pratique

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

TP 1 : 1 Calculs en binaire, octal et hexadécimal

IBM SPSS Statistics Version 22. Instructions d'installation sous Windows (licence nominative)

Cours Informatique Master STEP

I. Introduction aux fonctions : les fonctions standards

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

OS Réseaux et Programmation Système - C5

Télécom Nancy Année

Cours Programmation Système

Quelques éléments de compilation en C et makefiles

Programmation C++ (débutant)/instructions for, while et do...while

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Procédure d utilisation et de paramétrage (filtrage) avec IPFIRE

Chapitre I Notions de base et outils de travail

TP1 : Initiation à Java et Eclipse

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

Algorithmique et Programmation, IMA

STAGE IREM 0- Premiers pas en Python

Manuel d Utilisateur - Logiciel ModAFi. Jonathan ANJOU - Maud EYZAT - Kévin NAVARRO

Séance 0 : Linux + Octave : le compromis idéal

Bases Java - Eclipse / Netbeans

TP 4 de familiarisation avec Unix

Hadoop / Big Data. Benjamin Renaut <renaut.benjamin@tokidev.fr> MBDS

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Installation et prise en main

Serveur Acronis Backup & Recovery 10 pour Linux. Update 5. Guide d'installation

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

TD/TP 1 Introduction au SDK d Android

Présentation du logiciel Cobian Backup

Conventions d écriture et outils de mise au point

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

progecad NLM Guide de l'utilisateur

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

IBM SPSS Statistics Version 22. Instructions d'installation sous Windows (licence simultanée)

Programmation système I Les entrées/sorties

TP1 - Prise en main de l environnement Unix.

Tutoriel code::blocks

Le langage C. Séance n 4

Université Ferhat ABBAS -Sétif

Compte-rendu de projet de Système de gestion de base de données

Bases de programmation. Cours 5. Structurer les données

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

CSI351 Systèmes d exploitation Instructions pour rouler Linux avec Virtual PC dans la salle de labo 2052

Introduction. Catalogues multiples

3IS - Système d'exploitation linux - Programmation système

1. Structure d'un programme FORTRAN 95

Testez votre installation. Créer un répertoire vide

Chapitre 10 : Logiciels

Le prototype de la fonction main()

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

Remote Method Invocation (RMI)

Un serveur web, difficile?

UE Programmation Impérative Licence 2ème Année

Gestion mémoire et Représentation intermédiaire

TP 1 Prise en main de l environnement Unix

UserLock Guide de Démarrage rapide. Version 8.5

NOTE D'APPLICATION CONCERNANT LA MISE EN SERVICE DE MATERIELS SUR RESEAU IP

DELEGATION ACADEMIQUE AU NUMERIQUE FORMATION ADMINISTRATEUR SCRIBE 2.3 ET CARTABLE EN LIGNE (CEL)

Bienvenue sur Lab-Windows Il n'y a de vents favorables que pour ceux qui ont un cap

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Procédure : Sauvegarder un Windows 7 sur un disque réseau

GANTTPROJECT. Julien TENDERO

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

WINDOWS SERVER 2003 Maintenance d'active directory V1.0

Raja Bases de données distribuées A Lire - Tutoriel

1. Introduction Création d'une requête...2

TP1 : Initiation à Java et Eclipse

Concept de machine virtuelle

VoIP - TPs Etude et implémentation

Structure d un programme

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

ACTIVITÉ DE PROGRAMMATION

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Storebox User Guide. Swisscom (Suisse) SA

SweetyPix, mode d'emploi

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Annexe : La Programmation Informatique

Test de HSQLDB et Comparatif avec Sqlite

HMI target Visu / PLC HMI. Pour réaliser une interface homme machine avec PLC control

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

Ateliers Python+Qt : Premiers pas : Comment développez ses propres interfaces graphiques sur le RaspberryPi?

TP2 - Conguration réseau et commandes utiles. 1 Généralités. 2 Conguration de la machine. 2.1 Commande hostname

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Améliorations Sage Gestion Commerciale version 7.71 Sage Comptabilité version 7.72

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Areca Backup Première Sauvegarde - Configurez votre premier groupe et votre première cible.

Tutorial et Guide TeamViewer

Service WEB, BDD MySQL, PHP et réplication Heartbeat. Conditions requises : Dans ce TP, il est nécessaire d'avoir une machine Debian sous ProxMox

Transcription:

Compilation TP N 1 2016/2017 3 A. Licence Environnement de développement L'objectif des travaux pratiques est d'implémenter les diérentes méthodes et techniques de compilation. Il convient alors de commencer par une présentation des outils de développement disponibles 1 dans l'environnement choisi, à savoir la programmation en langage C avec gcc 2 (le compilateur C de Gnu) sous Linux. Ce premier TP ore à l'étudiant, entre autres, l'opportunité de se familiariser avec les outils communément appelés les cousins du compilateur. 1 Éditeur de texte Sur toutes les distributions Linux, on trouve plusieurs éditeurs de texte modernes en mode graphique, tels que gedit, nedit, kwrite, kate, pluma, tea, leafpad,... dont l'utilisation est similaire à celle de ceux que l'on trouve dans tous les autres environnements de développement. En convenant d'utiliser gedit 3, celui-ci peut être lancé de plusieurs manières dont on cite les deux suivantes : 1. Sélectionner la rubrique correspondante du sous-menu Accessoires du menu Applications. 2. Ouvrir une fenêtre de commandes (un terminal) en sélectionnant la rubrique Terminal MATE du sous-menu Outils système du menu Applications ; puis, lancer l'une des commandes suivantes : $ gedit & ou bien $ gedit <nom_du_fichier_à_éditer> & Le marqueur '$' désigne l'invite (ou le prompt) et ne doit pas être saisi. Le caractère '&' suggéré pour être placé à la n de, indique au shell (l'interpréteur de commandes) d'exécuter cette dernière en arrière plan (ou en tâche de fond). Ainsi, on pourra lancer l'exécution d'autres commandes (par exemple, de compilation) sans attendre la terminaison de la précédente, donc sans fermer l'éditeur de texte. Notons toutefois, qu'un utilisateur habitué d'un autre éditeur tel que vi, nedit, xemacs, nano, pico,... ou d'un environnement de développement intégré (IDE) tel que Code : :Blocks, eclipse, geany,... pourra bien-sûr l'utiliser sans aucun inconvénient. 2 Commandes de compilation Considérons un programme (squelettique) en langage C contenu dans un chier de nom prog.c. La compilation de ce programme se fait par de syntaxe générale : $ gcc [ options ] prog. c Si le programme contient la dénition de la fonction principale main() et ne contient pas d'erreurs, 1. d'autres outils seront présentés en détail dans la suite du programme. 2. Gnu C Compiler. 3. gedit est installé par défaut sur tout système Debian GNU/Linux. 1

$ gcc prog.c produira le programme exécutable qui porte par défaut le nom a.out, et qui peut être exécuté par $./a.out Principales options de gcc : -c Cette option indique que l'on ne souhaite pas eectuer l'édition des liens. Ainsi, la commande $ gcc -c prog.c produira un chier objet de nom prog.o Notons que cette option est nécessaire pour un programme ne contenant pas de fonction main(). -o <fichier_de_sortie> Cette option permet d'attribuer un nom au chier produit par la commande. Cela annule de ce fait l'appellation par défaut (a.out). Ainsi, $ gcc -o prog prog.c produira le chier exécutable de nom prog. -E Cette option indique que l'on ne souhaite pas eectuer la compilation proprement dite, mais juste préparer le programme squelettique à la compilation ; i.e., lui faire subir les pré-traitements. Ainsi, $ gcc -E prog.c permet juste de lancer le préprocesseur qui produira le programme source en langage C qui sera aché à l'écran. Il est possible de sauvegarder dans un chier la sortie de la commande précédente en lui ajoutant l'option -o prog.i ; soit $ gcc -E -o prog.i prog.c -S Cette option indique que le programme cible doit être en code assembleur. Il n'y aura ni assemblage, ni édition des liens. Ainsi, $ gcc -S prog.c produira un chier de nom prog.s contenant le résultat de la compilation du programme C en langage d'assemblage. Notons que le code assembleur produit par gcc suit la syntaxe 4 dite d'at&t, très diérente de la syntaxe dite d'intel, suivie par les assembleurs tels que MASM et NASM pour ne citer que celas. 3 Les cousins du compilateur La description ci-dessus montre bien qu'en réalité gcc ne permet par seulement d'invoquer le compilateur de même nom, mais de lancer un ou plusieurs des programmes suivants 5 : 4. AT&T (American Telephone and Telegraph) est le nom nom de la société ayant crée le système UNIX. 5. Le préprocesseur, l'assembleur et l'éditeur de liens sont parfois appelés les cousins du compilateur. 2

Le préprocesseur cpp (C preprocessor), le compilateur proprement dit, gcc (gnu C compiler), l'assembleur as (assembler) et l'éditeur de liens ld (link editor). Ces outils peuvent être invoqués par leurs propres noms. Ainsi, $ cpp prog.c permet d'invoquer le préprocesseur ; elle permet d'eectuer le même traitement que : gcc -E prog.c De même, $ cpp prog.c -o prog.i permet d'eectuer le même traitement que gcc -E prog.c -o prog.i $ as prog.s -o prog.o permet d'assembler le programme (assembleur) contenu dans le chier prog.s Cette commande produit un chier objet de nom prog.o ld prog.o permet d'invoquer l'éditeur de liens ; elle produira le programme exécutable appelé par défaut a.out. Pour changer cette appellation, on utilise l'option -o comme pour gcc. 4 Exemple de développement On se propose dans le cadre de ce premier TP, d'utiliser, d'analyser et de ce familiariser avec les outils ci-dessus. Cela permettra de prendre connaissance des diérentes étapes que traverse un programme source squelettique pour être transformé en programme exécutable. Un petit exemple de programme est proposé et utilisé dans la suite, mais l'étudiant peut bien-sûr utiliser un autre programme de sa propre création. Soit le petit programme constitué des trois chiers prog.h, prog.c et main.c dont les contenus sont : /* fichier prog. h */ # define MAX (X, Y ) (X < Y )? Y : X // Définition d ' une macro - instruction // de nom MAX et ayant deux paramètres. int max ( int, int, int, int ); // Prototype d ' une fonction de nom max. /* fichier prog. c */ # include " prog. h " # ifdef USEMACRO // USEMACRO est une variable de // compilation. int max ( int x, int y, int z, int t ){ return ( MAX ( MAX (x, y ), MAX (z, t ))); } 3

# else int max ( int x, int y, int z, int t ){ int m = x ; if (m < y ) m = y ; // Les deux fonctions retournent if (m < z ) m = z ; // le maximum des quatre nombres if (m < t ) m = t ; // fournis en arguments. return m ; } # endif /* fichier main. c */ # include " prog. h " // Pour éviter d ' inclure le header stdio. h, int main (){ // le maximum ne sera pas affiché mais return max (2,5,7,3); // retourné comme résultat à l ' interpréteur } // de commandes. La variable de compilation USEMACRO (à ne pas confondre avec une variable de programme) permettra de sélectionner laquelle des deux implémentations (dénitions) de la fonction max sera retenue pour le programme source. Notons que la première version de la fonction max() utilise la macro dénie dans prog.h alors que le seconde ne l'utilise pas. Travail à eectuer 1. Saisir ou mieux, télécharger les trois chiers prog.h, prog.c et main.c à partir du site https://compil.shost.ca 2. Lancer cpp -o prog.i prog.c puis acher prog.i et noter les prétraitements réalisés. 3. Lancer cpp -DUSEMACRO -o prog.i prog.c et comparer le résultat avec le précédent. Cette nouvelle commande dénit la variable de compilation USEMACRO. 4. Lancer gcc -S prog.i qui doit produire le programme assembleur prog.s ; ouvrir ce chier (mais sans le modier). Cette commande lance la compilation proprement dite et elle seule. 5. Assembler le chier prog.s par as -o prog.o prog.s 6. Compiler le chier main.c comme pour prog.c ou plus rapidement avec gcc -c main.c Cela doit produire le chier objet main.o 7. Lancer l'édition des liens par ld main.o et noter le message d'erreur. 8. Lancer maintenant ld main.o prog.o et... encore une erreur! Il manque une fonction de nom _start, pourquoi? L'exécution de tout programme doit commencer par une fonction _start et c'est elle qui fait appel à la fonction main(). De ce fait, gcc n'invoque pas l'éditeur des liens comme on vient de le faire, mais ajoute à la ligne de commande un certain nombre de librairies et de chiers objets qui fournissent la fonction _start. 9. Pour pouvoir générer l'exécutable de notre programme, voici la programmation en assembleur de la fonction _start, placée dans un chier debut.s (à télécharger également) : 4

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # fichier debut. s. global _start _start : push % rbp # Sauvegarde du contexte courant. mov % rsp,% rbp call main # Appel à la fonction main (). leave # Restitution du contexte. mov % rax,% rbx # Copie la valeur de retour dans # le registre % rbx. mov $1,% rax # appel système exit, nécessaire int $0x80 # pour arréter l ' exécution du # programme. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 10. Lancer maintenant as -o debut.o debut.s puis ld -o max main.o prog.o debut.o Il n'y a plus d'erreur ; on peut exécuter le programme max../max Aucune erreur d'exécution mais où est le résultat? Il constitue la valeur retournée au shell et celle-ci est achable par echo $? Et oui, le maximum des quatre nombre 2, 5, 7 et 3 (voir main.c) est 7. Remarque : Si vous développez sur un système à 32 bits, il faudra utiliser le programme debut32.s (également oert en téléchargement) à la place de debut.s 5 Autres commandes utiles cat less more <fichier_texte> Ces commandes servent à acher le contenu d'un chier texte. indent <programme_source> Cette commande sert à indenter un code source pour améliorer sa lisibilité. file <fichier> Ache le type d'un chier : archive, exécutable, texte, objet,... 5