Académique Documents
Professionnel Documents
Culture Documents
Génie logiciel
C02B
LOG1000
GCC et GDB
Ingénierie logicielle
1. Code source
et compilation
2. Qu’est-ce GCC
que GCC ?
(GNU Compiler Collection)
3. GCC et Make
et GDB
4. GDB (GNU Debugger)
Avec du matériel produit par Bram Adams, Michel Gagnon et Nikolay Radoev 1
LOG1000
Génie logiciel Gestion de configuration logicielle
C02B
GCC et GDB
1. Code source
et compilation
2. Qu’est-ce
que GCC ?
3. GCC et Make
4. GDB
2
LOG1000
Génie logiciel Outils d’intégration (« build systems »)
C02B
GCC et GDB ●
Objectif : prendre tous les fichiers et les
assembler en un logiciel fonctionnel :
1. Code source
et compilation
●
Code source,
2. Qu’est-ce
●
Images, modèles 3D,
que GCC ?
3. GCC et Make
●
Données et bases de données,
4. GDB
●
Librairies et code réutilisé,
●
Etc.
3
LOG1000
Génie logiciel Outils d’intégration (« build systems »)
C02B
GCC et GDB ●
Ces outils facilitent la transformation :
●
code source lisible par les humains → code
1. Code source
et compilation
binaire lisible par la machine.
2. Qu’est-ce
que GCC ?
3. GCC et Make
Code de Code de Code
Code
4. GDB haut bas binaire
objet
niveau niveau fonctionnel
Code binaire
Ex.: Python, Ex.: C, C++ Ex.: .exe, .DLL
non-lié à ses
Ruby
dépendances
Ex.: .o
1. Code source
●
Cette étape permet séparer le code en sous-éléments :
et compilation
●
Si un seul sous-élément est modifié, je n'ai besoin de re-
2. Qu’est-ce compiler que ce sous-élément.
que GCC ?
3. GCC et Make
●
Je peux ensuite produire l'exécutable en faisant le
« linking » des vieux fichiers .o des sous-éléments non-
4. GDB modifiés, avec le nouveau .o compilé.
●
Cette étape permet de séparer le code des librairies
externes utilisées :
●
Ex.: stdio, iostream en C/C++,
●
Ex.: DLL avec Windows,
●
Le « linking » va lier les fichiers .o avec la dernière version
des librairies installée sur la machine.
– Durant le « linking » en C/C++,
5
– Durant l'exécution avec les DLL (dynamic linking).
LOG1000
Génie logiciel Pourquoi a-t-on besoin de l’étape du « linking » ?
C02B
GCC et GDB
3. GCC et Make
main.o newton.o comparison.o
4. GDB
« linking »
executable
●
La compilation prend plus de temps que le « linking ».
●
Si je change « newton.c », je n'ai pas besoin de tout
recompiler. Je peux juste refaire la compilation #2. 6
●
Utile pour un projet typique avec des centaines de fichiers.
LOG1000
Génie logiciel Qu’est-ce que GCC ?
C02B
GCC et GDB ●
GCC (GNU Compiler Collection) est l'outil de
base sur Linux pour la compilation et le
1. Code source
« linking » de code source.
et compilation
●
Il supporte une grande gamme de langages de
2. Qu’est-ce
que GCC ? programmation, dont le C/C++.
3. GCC et Make ●
Exemple minimal basé sur les fichiers
4. GDB
précédents :
compilations
gcc -o main.o -c main.c
gcc -o newton.o -c newton.c
gcc -o comparison.o -c comparison.c
●
Notez qu'on ne spécifie pas les fichiers .h : en
lisant les fichiers, GCC va voir les « include » et7
les ajouter.
LOG1000
Génie logiciel Qu’est-ce que GCC ?
C02B
GCC et GDB
gcc -o main.o -c main.c
1. Code source
et compilation Nom du fichier à compiler
Indique que le prochain
2. Qu’est-ce
que GCC ?
argument est le fichier
de sortie (« output file »)
3. GCC et Make
Nom du fichier à produire
4. GDB
1. Code source
et compilation
Indique que le prochain
2. Qu’est-ce
que GCC ?
argument est le fichier
de sortie (« output file ») Liste des fichiers qui
3. GCC et Make seront pris en entrée.
Nom du fichier à produire
4. GDB
●
GCC est très flexible et peut être utilisé selon vos
besoins.
●
Ex.: La commande suivante produit l'exécutable
directement sans la création des fichiers objets
intermédiaires (.o).
gcc -o executable main.c newton.c comparison.c
9
LOG1000
Génie logiciel Qu’est-ce que GCC ?
C02B
GCC et GDB
●
GCC offre une très large gamme d'options pour
la compilation et le « linking » selon les besoins
de l'application. En voici quelques-unes :
1. Code source
et compilation ●
Lors de la compilation, affiche une série
2. Qu’est-ce importante d'avertissements (« warnings ») :
que GCC ?
gcc -o test.o -c test.c -Wall
3. GCC et Make
4. GDB
●
Lors du « linking », ajoute les librairies standard
de mathématiques (ex.: math.h).
gcc -o executable main.o test.o -lm
●
Lors de la compilation, affiche tous les
avertissements recommandés par l'ISO :
gcc -o test.o -c test.c -Wpedantic
●
Lors de la compilation, ajoute des informations
dans le fichier binaire afin d'aider le débogage :10
gcc -o test.o -c test.c -g
LOG1000
Génie logiciel Qu’est-ce que GCC ?
C02B
GCC et GDB ●
GCC est le compilateur pour le langage C.
●
Pour le langage C++, il faut utiliser le compilateur
1. Code source
et compilation
G++.
2. Qu’est-ce
●
Dans les faits, G++ appelle le compilateur GCC
que GCC ?
avec des options particulières :
3. GCC et Make
●
Plutôt que de devoir se rappeler ces options un
peu obscures, on utilise g++ :
g++ -o main.o -c main.cpp
g++ -o test.o -c test.cpp 11
g++ -o executable main.o test.o
LOG1000
Génie logiciel Outils d’intégration (« build systems »)
C02B
GCC et GDB ●
OK, on comprend comment utiliser GCC et G++.
●
Mais se rappeler et taper toutes ces commandes
1. Code source
et compilation
à chaque fois est plutôt laborieux.
2. Qu’est-ce
●
Sur Visual Studio, il suffisait de pousser un
que GCC ?
bouton et tout le code était compilé, lié et
3. GCC et
Make exécuté.
4. GDB ●
Peut-on faire la même chose ?
12
LOG1000
Génie logiciel Outils d’intégration (« build systems »)
C02B
GCC et GDB ●
L'outil GNU Make permet d'automatiser des
commandes Linux : n'importe quelles
1. Code source
commandes.
et compilation
●
Cela inclut donc gcc/g++ !
2. Qu’est-ce
que GCC ? ●
On spécifie les commandes dans un fichier
3. GCC et
Make
appelé « Makefile », équivalent au fichier de
4. GDB
projet dans Visual Studio.
13
LOG1000
Génie logiciel GDB (GNU Debugger)
C02B
GCC et GDB ●
Visual Studio offre un outil pour aider le
débogage. GNU en offre aussi un en ligne de
1. Code source
commandes : GDB
et compilation
●
L'outil est déjà installé sur la machine virtuelle.
2. Qu’est-ce
que GCC ? ●
Pour s'en servir, il faut compiler le code (.c
3. GCC et Make
→ .o) avec une option particulière : "-g". Cette
4. GDB option laisse des marques dans le binaire que
GDB peut utiliser.
gcc -o main.o -c main.c -g
●
Pour lancer le débogueur :
gdb --args newton 49 3
nom de l’exécutable
premier argument passé à l’exécutable 14
4. GDB
16