intro_prog_linux.html from Gulus at Krugle
Show intro_prog_linux.html syntax highlighted
Introduction à la programmation sous Linux<br>
Version 1.2 (2000/11/24)<br>
<br>
Auteur: Mathieu Lutfy (mathieu@lowtech.dhs.org)<br>
<br>
<A HREF="intro_prog_linux.txt">Téléchargez la version texte</A><br>
<br>
1.0 Introduction<br>
================<br>
<br>
1.1 Préambule<br>
-------------<br>
<br>
Ce texte vise à donner une introduction générale aux ressources disponibles<br>
pour la programmation sous Linux. Ce texte prend pour acquis que le lecteur<br>
est familier avec les bases de la programmation, que ce soit sous MS Windows<br>
ou MacOS.<br>
<br>
Vos commentaires ou corrections sont les bienvenues à mathieu@lowtech.dhs.org.<br>
Vous pouvez retrouver la version originale et les versions futures de ce texte<br>
à l'adresse suivante: http://mtl2600.dhs.org/textes/intro_prog_linux.txt<br>
<br>
<br>
1.2 Redistribution<br>
------------------<br>
<br>
Vous pouvez librement redistribuer ce texte, en autant que vous respectez la<br>
"GNU Free Documentation License":<br>
<br>
Copyright (c) Mathieu Lutfy (mathieu@lowtech.dhs.org)<br>
Permission is granted to copy, distribute and/or modify this document<br>
under the terms of the GNU Free Documentation License, Version 1.1<br>
or any later version published by the Free Software Foundation;<br>
with no Invariant Sections, with no Front-Cover Texts, and with no<br>
Back-Cover Texts. A copy of the license is included in the section<br>
entitled "GNU Free Documentation License".<br>
<br>
<br>
1.3 Conventions utilisées dans ce texte<br>
---------------------------------------<br>
<br>
- Les références sont dans la dernière section du texte. Lorsqu'une de ces<br>
références sera mentionnées dans le texte, il y aura un chiffre (ex: [1])<br>
indiquant le numéro de la référence en question.<br>
<br>
- Les sites web des applications mentionnées dans ce texte sont joints<br>
aux références (à la fin du texte).<br>
<br>
- Ce texte fait spécifiquement référence à Linux, mais la majorité des<br>
pricipes s'appliquent à Unix en général (FreeBSD, OpenBSD, SunOS/Solaris,<br>
etc..).<br>
<br>
- Lorsque utilisé en début de ligne, $ représente l'invite de la ligne de<br>
commande (prompt).<br>
<br>
<br>
1.4 Pourquoi programmer sous Linux ou Unix?<br>
-------------------------------------------<br>
<br>
Linux est un système d'exploitation multi-plateforme (IA32, IA64, PowerPC, <br>
Alpha, Sparc, etc..) à la fois flexible, stable et performant. De plus, Linux<br>
a été construit avec la même philosophie qu'Unix et il existe un standard<br>
de programmation nommé POSIX (Portable Operating System Standart) qui permet<br>
aux programmeurs de garder un niveau d'abstraction suffisamment élevé face<br>
au système d'exploitation.<br>
<br>
Le plus grand avantage découle probablement du fait que la philosophie<br>
dominante des usagers de Linux est celle du Logiciel Libre (Free Software). <br>
L'usager est donc libre d'adapter un programme à ses besoins, libre de<br>
participer au développement du logiciel et libre de copier le code source<br>
d'une application dans son application, en autant que les deux applications<br>
soient considérées des Logiciels Libres.<br>
<br>
Un texte incontournable sur le sujet est "The Art of Unix Programming"[1], <br>
par Eric S. Raymond.<br>
<br>
<br>
1.5 La guerre des éditeurs<br>
--------------------------<br>
<br>
Une bonne partie de ce document est consacrée aux éditeurs pour programmer.<br>
La raison est très simple, sous Linux, les gens sont généralement d'accord<br>
pour dire que GNU gcc est le meilleur compilateur, GNU gdb un excellent<br>
débogueur, etc.. mais étant donné que les usagers passent la majorité de<br>
leur temps à programmer dans un éditeur de texte, ils tendent à être très<br>
pointilleux sur le comportement de ce dernier.<br>
<br>
De plus, il y a deux types d'éditeurs: les IDE (Integrated Development<br>
Environment) et les programmes qui ne sont qu'un éditeur de texte. Les usagers<br>
de MS Windows sont probablement familiers avec l'IDE "MS Visual C++", et<br>
les éditeurs "simples" tels que Notepad ou Ultra Edit.<br>
<br>
De façon générale, les IDE ont une interface graphique au compilateur et<br>
au débogueur, tandis que l'éditeur ne fait qu'éditer et a une interaction<br>
limitée avec le compilateur et le débogueur (c'est le cas pour tous les<br>
éditeurs mentionnés dans cet article).<br>
<br>
Sous Linux, il n'y a pas un éditeur prédominant. Vi/Vim, Emacs, Code Crusador,<br>
KDevelop, NEdit, jEdit, etc.. ne sont que le début de la liste. De plus, le<br>
débat cherchant à définir "le meileur éditeur" est toujours d'actualité. À <br>
chaque année, des partisans de Vi et Emacs (deux vétérans dans le domaine de<br>
la programmation) se réunissent pour s'affronter dans une partie de "paintball".<br>
<br>
<br>
2.0 Survol des éditeurs graphiques<br>
==================================<br>
<br>
2.1 Note<br>
--------<br>
<br>
Trois points communs sont dans les sections ci-bas: sous-applications<br>
supportées, langages/syntaxes supportés et licence. J'ai eu de la difficulté<br>
à choisir une expression qui s'appliquait à tous les éditeurs concernant<br>
les deux premières sections. Je m'explique:<br>
<br>
- Sous-applications supportées: <br>
<br>
La majorité des IDE n'ont pas de compilateur ou débogueur intégré (tel<br>
qu'expliqué dans la section 1.5), mais auront une interface graphique pour<br>
simplifier la sortie texte des applications appelées, donnant l'impression<br>
que le compilateur est intégré. Une sous-application qui n'est pas listée<br>
signifie que pour l'exécuter, il faudra lancer la commande par un terminal.<br>
Beaucoup d'éditeurs font cela parce que leurs usagers préfèrent utiliser<br>
ces outils de la façon traditionnelle (et standard) plutôt que d'avoir une<br>
interface différente pour chaque éditeur.<br>
<br>
- Langages/syntaxes supportés:<br>
<br>
Ceci signifie que l'éditeur est capable de surligner et indenter le code.<br>
Si votre langage préféré n'est pas listé, cela signifie que l'éditeur<br>
agira comme un éditeur de texte ordinaire (à-la-Notepad), mais certaines<br>
fonctionalités seront quand même configurables.<br>
<br>
- Licence:<br>
<br>
Tous les logiciels dans ce texte sont des Logiciels Libres, c'est à dire<br>
que vous avez accès à leur code source et leur utilisation n'est pas limitée.<br>
Vous trouverez plus d'information sur les différentes licences "Libres"<br>
sur le site de GNU[2] et OpenSource[3] (ils ont des mentalitées divergentes,<br>
mais pour vous l'usager, ils sont équivalents).<br>
<br>
<br>
2.2 Code Crusader<br>
-----------------<br>
<br>
Inspiré par l'interface graphique de Metrowerks Code Warrior, Code Crusador<br>
est probablement un des éditeurs qui inclue le plus d'outils graphiques pour<br>
programmer, dont un débogueur graphique (Code Medic), un générateur de<br>
graphique pour illustrer graphiquement l'héritage des classes C++ et génère<br>
automatique les fichiers Makefile (pour automatiser la compilation), en plus<br>
des fonctionalités habituelles, soient la vérification et colorisation du<br>
code source, etc..<br>
<br>
Le seul défaut à cette application pourrait être un peu irritant. L'application<br>
a été écrite avec un API graphique nommé "JX Application Framework", dont<br>
l'apparence est loin d'être aussi attrayante que celles de GTK+/Gnome ou<br>
QT/KDE. Par contre, l'application est très rapide et ne consomme pas beaucoup<br>
de mémoire vive.<br>
<br>
- Sous-applications supportées: <br>
Fortran, bison, cc, CC, flex, gcc, g++, g77, KAI C++, make<br>
<br>
- Langages/syntaxes supportés:<br>
C, C++, HTML (voir leur site web pour plus d'informations, beaucoup d'autres<br>
langages sont partiellement supportés)<br>
<br>
- Licence:<br>
New Planet Software Library Open Source License Version 1.0 (basée sur QPL)<br>
<br>
<br>
2.3 KDevelop<br>
------------<br>
<br>
Fortement inspiré de Microsoft Visual C++, KDevelop mise sur la facilité<br>
d'utilisation et outils d'aide à la programmation. Parmis ses points forts<br>
sont le support des projets QT/KDE et GTK+/Gnome, un navigateur visuel de<br>
classes (C++), une interface à CVS (Control Version System) et un assistant<br>
de projets (app wizard + générateur de fichiers autoconf/automake).<br>
<br>
Leur site web contient une impressionnante quantité d'information, tutoriels,<br>
forum de discussion, etc. Chose rare pour un éditeur de programmation.<br>
Petit inconvénient, l'éditeur comprend que les langages C et C++.<br>
<br>
- Sous-applications supportées: autoconf, automake, make, gcc, g++<br>
- Langages/syntaxes supportés: C, C++<br>
- Licence: GNU GPL<br>
<br>
<br>
2.4 jEdit<br>
---------<br>
<br>
jEdit se veut simple, flexible et pratique. Plus de 40 langages sont<br>
supportés, indentation automatique, vérification de syntaxe et transferts<br>
FTP intégrés (donne l'impression d'éditer un fichier à distance) ne sont<br>
que quelques fonctionalités, mais son architecture modulaire très flexible<br>
est très intéressante. Lancez le gestionnaire de "plugins" lorsque vous<br>
êtes connectés à Internet et celui-ci ira chercher la liste des plugins<br>
disponibles et les téléchargera au besoin. De plus, le navigateur de<br>
classes rend la programmation Java et C++ plus agréable.<br>
<br>
L'application est écrite en Java, ce qui, comme toutes applications Java,<br>
est un avantage et un inconvénient. D'une part, il est un peu plus lent<br>
et un peu gourmand, mais en revanche, vous pourrez l'utiliser sur toutes<br>
les plateformes supportées par Java (Unix, MacOS, Windows, etc..).<br>
<br>
- Sous-applications supportées: Aucune, mais des plugins supportent le Java<br>
- Langages/syntaxes supportés: Java, C, C++, Perl et plus de 40 autres<br>
- Licence: GNU GPL<br>
<br>
2.5 NEdit<br>
---------<br>
<br>
NEdit est petit et facile à configurer. Son apparence est très minimaliste,<br>
mais il peut surligner du code, faire des macros et beaucoup plus que les<br>
autres éditeurs de cette catégorie. Toutefois, il ne gère pas les projets<br>
et il n'a pas d'interface graphique à la compilation.<br>
<br>
- Sous-applications supportées: aucune<br>
- Langages/syntaxes supportés: Ada, C, C++, Fortran, Java, Perl, Python<br>
et beaucoup d'autres<br>
- Licence: GNU GPL<br>
<br>
<br>
3.0 Survol des éditeurs traditionnels<br>
=====================================<br>
<br>
3.1 Introduction<br>
----------------<br>
<br>
Les deux principaux éditeurs traditionnels sont Vi et Emacs. Connus par<br>
certains comme étant inutilement complexes, mais aussi connus pour leur<br>
flexibilité et efficacité.<br>
<br>
<br>
3.1 Emacs / XEmacs<br>
------------------<br>
<br>
Emacs contient beaucoup trop d'outils et de commandes pour en faire un<br>
survol dans ce texte. Par contre, c'est facile de se promener dans<br>
l'éditeur avec les quelques commandes suivantes:<br>
<br>
(Note: Ctrl est représenté par "C" et la virgule "," devrait se lire "puis")<br>
<br>
<br>
C-x, C-f : Ouvrir un fichier (la touche Tab peut être utilisée pour compléter <br>
ou lister les choix disponibles)<br>
<br>
C-x, C-s : Sauver un fichier<br>
<br>
C-s : (search) Faire une recherche dans le texte<br>
<br>
C-g : Annuler la commande en cours<br>
<br>
C-x u : (undo) Annuler la dernière commande<br>
<br>
C-x 2 : Créer une nouvelle fenêtre horizontalement<br>
<br>
C-x 3 : Créer une nouvelle fenêtre verticalement<br>
<br>
C-x 1 : Cacher les autres fenêtres et affiche que la fenêtre active<br>
<br>
C-x o : Se déplacer d'une fenêtre à l'autre (comme Alt-Tab dans Windows)<br>
<br>
C-x k : (kill) Fermer le texte de la fenêtre active<br>
<br>
C-espace : Commencer la sélection d'une région (puis se déplacer avec les <br>
flèches pour sélectionner une région)<br>
<br>
Alt-w : Copier la région sélectionnée<br>
<br>
C-w : Couper la région sélectionnée<br>
<br>
C-y : Coller la région copiée<br>
<br>
C-x, C-c : Quitter emacs<br>
<br>
<br>
XEmacs est un clône d'Emacs, mais avec une interface graphique plus facile<br>
à utiliser. Toutefois, les dialogues de sélections d'XEmacs ont un défaut,<br>
pour sélectionner il faut utiliser le bouton du milieu de votre souris et<br>
non le bouton gauche (si vous n'avez que deux boutons, il faut cliquer les<br>
deux en même temps pour simuler le 3e bouton).<br>
<br>
<br>
3.2 Vi / Vim / gVim<br>
-------------------<br>
<br>
Vi est un éditeur très minimaliste, mais extrêmement puissant. Avec le temps,<br>
Vim (Vi iMproved) est venu remplacer Vi et est beaucoup plus convivial. Il<br>
comprend aussi une interface graphique (optionnelle), gVim, qui a l'apparence<br>
du Notepad dans Windows, mais avec ayant quand mêmes les commandes de<br>
réputations obscures de Vi.<br>
<br>
Les avantages de Vim par rapport à Vi sont nombreux. Pour en nommer quelques<br>
uns, Vim permet de surligner la syntaxe, plusieurs niveaux de "undo" (et <br>
"redo") et permet d'afficher plusieurs fichiers dans le même cadre (surtout<br>
pratique pour le mode texte).<br>
<br>
Voici quelques commandes essentielles à Vi:<br>
<br>
:e foo.c : ouvre un fichier (ou le crée)<br>
:w : sauver le fichier<br>
:w bar.c : sauver le fichier sous le nom bar.c<br>
:q : quitter vi (ou fermer la fenêtre active)<br>
:q! : quitter vi sans sauver<br>
i : insérer avant le curseur (I : insérer au début de la ligne)<br>
a : insérer après le curseur (A : insérer à la fin de la ligne)<br>
o : ouvrir une ligne en-dessous (O : ouvrir une ligne au-dessus)<br>
J : joindre la ligne suivante après la ligne courante<br>
u : undo (annuler la dernière commande)<br>
U : undo global pour toute la ligne<br>
Ctrl+R : redo (annuler la dernière commande annulée)<br>
Ctrl+G : Affiche des informations sur le fichier et la position du curseur<br>
ESC : quitter le mode d'insertion<br>
<br>
Chercher et remplacer:<br>
<br>
:n : Aller à la n-ième ligne. (:1 aller au début du texte)<br>
/foo : Recherche le mot "foo" dans le texte (?foo cherche en arrière)<br>
:s/ab/ba : Substituer la première occurence de "ab" par "ba"<br>
Pour remplacer toutes les occurences sur la ligne, :s/ab/ba/g<br>
(où 'g' signifie 'global')<br>
:4,10s/ab/ba/g : Remplace toutes les occurences de "ab" par "ba" sur les lignes<br>
de 4 à 10. (:1,$s/ab/ba/g pour tout le texte, $ = fin)<br>
%s/ab/ba : Remplacer toutes les occurences. <br>
<br>
Couper/Coller, supprimer:<br>
<br>
x : Coupe le caractère sous le curseur (10x en supprime 10)<br>
dd : Coupe la ligne courante (10dd en supprime 10)<br>
D : Coupe à partir du curseur jusqu'à la fin de la ligne courante<br>
yy : Copie la ligne courante<br>
Y : Copie à partir du curseur jusqu'à la fin de la ligne courante<br>
p : Colle (paste) la dernière chaine de texte coupée/copiée<br>
:1,4y : Copie les lignes 1 à 5 (ce genre de préfixe s'applique à toutes les<br>
commandes)<br>
<br>
Se promener dans plusieurs fenêtres (spécifique à vim) :<br>
<br>
:new foo : Ouvrir une nouvelle fenêtre et lire le fichier "foo"<br>
Ctrl+w : Changer de fenêtre. Faire deux fois pour aller à la prochaine,<br>
ou faire Ctrl+w+flèche_haut pour aller à la fenêtre du haut.<br>
<br>
Les préfixes de lignes tels que "1,30" (qui signifie "de la ligne 1 à 30")<br>
s'appliquent à la majorité des commandes qui commencent par ":".<br>
<br>
Sous Vim, il est aussi possible d'activer la vérification et la colorisation<br>
de la syntaxe avec ":syntax on" (pour automatiser cette commande, il suffit<br>
de l'ajouter dans le fichier "~/.vimrc" avec la commande:<br>
$ echo "syntax on" >> ~/.vimrc<br>
<br>
Bref, les commandes de Vi sont très excentriques, mais par la quantité de<br>
combinaisons possibles, Vi devient un outil très efficace.<br>
<br>
<br>
4.0 Compiler<br>
============<br>
<br>
<br>
4.1 GNU gcc<br>
-----------<br>
<br>
Généralement appelé gcc pour le "Gnu C Compiler", gcc peut aussi compiler<br>
du C++ (g++), Java (gcj), Assembleur AT&T (gas), Fortran (g77) et autres.<br>
Si vous utilisez un IDE, vous n'aurez pas vraiment à vous soucier de cette<br>
section, mais c'est quand même utile de savoir comment les outils que vous<br>
ne voyez pas fonctionnent, ça peut faciliter le déboguage et mieux comprendre<br>
le processus global de la programmation. C'est aussi pratique de connaître<br>
ces outils si vous travaillez par telnet où vous ne pourrez pas utiliser<br>
votre IDE préféré.<br>
<br>
Voici quelques exemples de compilation d'applications, du plus simple vers<br>
des exemples plus complexes:<br>
<br>
$ g++ foo.cxx<br>
<br>
Par défaut le compilateur nomme l'exécutable "a.out", ajoutons l'options<br>
-o pour spécifier le nom du fichier à la sortie:<br>
<br>
$ g++ foo.cxx -o toto<br>
<br>
Si nous avons plusieurs fichiers sources pour le même exécutable:<br>
<br>
$ g++ foo.cxx bar.cxx -o toto<br>
<br>
L'usage de -Wall est très fortement suggéré pour éviter les erreurs de<br>
syntaxe et afficher le maximum d'avertissements:<br>
<br>
$ g++ -Wall foo.cxx -o toto<br>
<br>
Lorsque l'on doit déboguer avec gdb, on peut savoir exactement à quelle <br>
ligne de code le programme a planté, et quelles étaient les variables en<br>
ajoutant l'option -g:<br>
<br>
$ g++ -Wall -g foo.cxx -o toto<br>
<br>
Vous pouvez aussi demander à gcc d'optimiser le code machine généré, mais<br>
étant donné que ça demande plus de temps pour compiler, il est suggéré<br>
d'utiliser cette option que lorsque vous faites la commpilation finale de<br>
votre programme. Ceci se fait par l'option -O{1,2,3}:<br>
<br>
$ g++ -Wall -O1 foo.cxx toto<br>
<br>
Pour exécuter l'application, il suffit de faire "./toto". Le "./" signifie<br>
que l'on veut exécuter une application qui se situe dans le répertoire<br>
courant.<br>
<br>
Nous verrons dans la prochaine section comment automatiser la compilation<br>
d'une application.<br>
<br>
<br>
4.2 GNU make<br>
------------<br>
<br>
Make est un outil qui permet de simplifier et accélérer la compilation d'une <br>
application. Pour ce faire, l'application cherche un fichier "Makefile" qui<br>
indique comment compiler l'application. Tout comme GCC, make est souvent<br>
facilité par les IDE.<br>
<br>
Voici un exemple de Makefile:<br>
<br>
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Makefile .<br>
<br>
OBJS = fichier1.o fichier2.o<br>
EXEC = toto # nom exécutable de l'application<br>
CC = g++ # nom du compilateur, aurait pû être gcc, gcj, etc..<br>
CFLAGS = -Wall -g # voir le "man page" de gcc pour la liste complète<br>
DEL = rm -f # peut varier d'un système d'exploitation à l'autre<br>
<br>
all : $(OBJS)<br>
$(CC) $(OBJS) -o $(EXEC)<br>
<br>
# les fichiers à compiler :<br>
<br>
fichier1.o : fichier1.cxx fichier1.h<br>
$(CC) $(CFLAGS) -c fichier1.cxx -o fichier1.o<br>
<br>
fichier2.o : fichier2.cxx fichier2.h<br>
$(CC) $(CFLAGS) -c fichier2.cxx -o fichier2.o<br>
<br>
# petite fonction pour faire le ménage des exécutables:<br>
<br>
clean :<br>
$(DEL) $(EXEC) $(OBJS) core <br>
<br>
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fin . . <br>
<br>
Maintenant, faire <br>
<br>
$ make <br>
<br>
Compilera notre application, car "make" sans paramètre exécute la première<br>
section qu'il trouve, soit "all" (ceci est une convention), puis<br>
<br>
$ make clean<br>
<br>
supprimera les fichiers exécutables et "objects" (.o).<br>
<br>
Make est un bon outil pour les petits projets de 2 à 10 fichiers source,<br>
mais ça peut facilement devenir encombrant lorsqu'il y a des dépendances<br>
externes. Il y a de nombreux programmes pour simplifier la gestion d'un<br>
Makefile tels que la combinaison de autoconf[2] et automake[3].<br>
<br>
<br>
5.0 Déboguer<br>
============<br>
<br>
<br>
5.1 GNU gdb<br>
-----------<br>
<br>
Gdb est le "Gnu Debugger". Il peut être particulièrement efficace pour<br>
déboguer des applications multi-thread ou des programmes extrêment complexes,<br>
mais puisqu'il faut limiter la taille de cet article, il y a principalement <br>
deux commandes à connaître pour gdb:<br>
<br>
Si notre programme toto plante:<br>
<br>
$ ./toto <br>
segmentation fault<br>
<br>
Pas très descriptif...<br>
<br>
$ gdb toto<br>
GNU gdb 5.0<br>
[snip, information sur gdb]<br>
This GDB was configured as "i686-pc-linux-gnu"...<br>
<br>
(gdb) run<br>
Program received signal SIGFPE, Arithmetic exception.<br>
0x804883f in main (argc=1, argv=0xbffffa24) at main.cxx:27<br>
27 int foo = 5 / 0;<br>
<br>
Ce qui nous permet de voir qu'à la ligne 27 de main.cxx, il y a une division<br>
par zéro.<br>
<br>
Cet exemple était peut-être un peu trop facile, prenons un exemple plus<br>
obscur qui se produit souvent en C++:<br>
<br>
$ gdb toto<br>
GNU gdb 5.0<br>
[snip, information sur gdb]<br>
This GDB was configured as "i686-pc-linux-gnu"...<br>
<br>
(gdb) run<br>
Program received signal SIGSEGV, Segmentation fault.<br>
0x400f501d in free () from /lib/libc.so.6<br>
<br>
Le programme a buggé dans une fonction qui est dans la librairie C (une<br>
librairie de très bas niveau qui est appelée par des appels intermédiaires<br>
dans une application, mais c'est probablement la fonction qui a fait cet<br>
appel qui est la source du problème. Pour voir par où le programme a passé<br>
avant de planter, utiliser la commande "bt", soit "backtrace", qui permet<br>
de tracer l'exécution:<br>
<br>
(gdb) bt<br>
#0 0x400f501d in free () from /lib/libc.so.6<br>
#1 0x40048814 in __builtin_delete () from /usr/lib/libstdc++-libc6.2-2.so.3<br>
#2 0x8048a94 in Pile<int>::depiler (this=0xbffff9b8, valeur=@0xbffff948) at pile.cxx:88<br>
#3 0x8048b01 in Pile<int>::vider (this=0xbffff9b8) at pile.cxx:114<br>
#4 0x8048b4b in Pile<int>::~Pile (this=0xbffff9b8, __in_chrg=2) at pile.cxx:32<br>
#5 0x8048947 in main (argc=1, argv=0xbffffa24) at main.cxx:43<br>
#6 0x400a1bcc in __libc_start_main () from /lib/libc.so.6<br>
<br>
La réponse n'est peut-être pas aussi évidente que l'exemple précédent, mais<br>
au moins nous pouvons voir qu'à la ligne #1 qu'il y a eu un problème lors de <br>
la désallcation de l'objet, d'où l'erreur fréquente en C ou C++ d'accéder à<br>
un espace mémoire du système qui n'appartient pas.<br>
<br>
<br>
5.2 lclint<br>
----------<br>
<br>
Lclint vérifie la solidité d'applications écrites en C et permet de trouver<br>
plusieurs erreurs de sémantique et autres erreurs fréquentes. Toutefois, lclint<br>
analyse que le C.<br>
<br>
<br>
6.0 Conclusion<br>
==============<br>
<br>
N'oubliez pas que chaque application possède une courbe d'apprentissage. Il y<br>
a généralement deux catégories: soit l'apprentissage est difficile au début,<br>
mais l'application est très flexible et efficace (courbe de la fonction <br>
exponentielle), tandis que d'autres sont très faciles dès le début, mais les<br>
fonctionalités plus avancées sont sont inexistantes ou inutilement complexes<br>
(courbe de la fonction racine carrée).<br>
<br>
Sous Linux (et Unix en général) vous avez le choix entre une multitude <br>
d'applications, il suffit de faire une bonne combinaison de logiciels pour<br>
ainsi combiner les deux courbes à votre avantage.<br>
<br>
<br>
7.0 Références<br>
==============<br>
<br>
7.1 Général<br>
-----------<br>
<br>
Linux : http://www.linux.org/, http://www.linux.com/<br>
FreeBSD : http://www.freebsd.org/<br>
OpenBSD : http://www.openbsd.org/<br>
NetBSD : http://www.netbsd.org/<br>
<br>
Gnome : http://www.gnome.org/<br>
KDE : http://www.kde.org/<br>
<br>
<br>
7.2 Éditeurs<br>
------------<br>
<br>
Code Crusader : http://www.newplanetsoftware.com/<br>
KDevelop : http://www.kdevelop.org/<br>
jEdit : http://jedit.sourceforge.net/<br>
NEdit : http://nedit.org/<br>
Emacs : http://www.gnu.org/software/emacs/emacs.html<br>
XEmacs : http://www.xemacs.org/<br>
Vim/gVim : http://www.vim.org/<br>
<br>
<br>
7.3 Autres applications<br>
-----------------------<br>
<br>
GCC : http://www.gnu.org/software/gcc/gcc.html<br>
GJC : http://sources.redhat.com/java/<br>
lclint : http://lclint.cs.virginia.edu/<br>
<br>
<br>
7.4 Sites mentionnés dans ce texte<br>
----------------------------------<br>
<br>
1 - The Art of Unix Programming: http://www.tuxedo.org/~esr/writing/taoup/<br>
2 - GNU : http://www.gnu.org/<br>
3 - OpenSource : http://www.opensource.org/<br>
<br>
<br>
7.5 Sites complémentaires<br>
-------------------------<br>
<br>
- Cartes de références (gdb, emacs et autres): http://www.refcards.com/<br>
- Répertoire d'applications Linux: http://freshmeat.net/<br>
- Répertoire d'applications scientifiques: http://sal.kachinatech.com/index.shtml<br>
<br>
<br>
8.0 Remerciements<br>
=================<br>
<br>
Je tiens à remercier les personnes suivantes dont les contributions sont<br>
grandement appréciées.<br>
<br>
Vincent Labrecque (limitln at cooptel.qc.ca)<br>
Benoit des Ligneris (benoit.des.ligneris at physique.usherb.ca)<br>
Guillaume Pratte (pratg00 at dmi.usherb.ca)<br>
<br>
See more files for this project here