"j´ai des erreurs avec les librairies"
Si tu as des erreurs, copie les sur le forum, sinon, ça ne sers à rien de dire que tu as des erreurs, on ne peut pas t´aider.
Ici, essaye avec :
int main(int argc,char** argv)
pour la déclaration de lafonction main.
Pour les bibliothèque (le mot librairie est un anglicisme et n´a pas le sens que u veux lui donner), c´est "assez" simple :
Il y a deux choses : les fichiers binaires des bibliothèques, ils sont stocké dans le dossier /usr/lib générallement (mais il peut y en avoir dans /usr/local/lib, ou à peut près n´importe où en fait) et se sont des fichier .so (pour Shared Object). Situ as un programme sur ton disque dur, tu peut taper :
ldd chemin_vers_ton_programme
pour qu´il t´affiche la liste des bibliothèque dont ton programme à besoin. Quand il se lance, un programme (ld) va chercher sur le disque dur tout les fichier .so qui contiennent les bibliothèque dont ton programme à besoin et va les charger avec le programme.
Donc pour qu´un programme tourne, il y a besoin de ces fichiers .so
Mais pour le programmeur, c´est un peu plus compliqué, car pour faire la compilation, le compilo à besoin de savoir quelles sont les fonctions qui existes, ça, c´est le rôle des fichiers d´en tête (. les fichiers .h), ils sont générallement, rangé dans /usr/include, mais ça peut être /usr/local/include, ou n´importe quoi d´autre (et il peuvent être à plusieurs endroit).
Quand tu compile un programme qui utilise la bibliothèque foo, il faut télécharger le fichier foo.so (générallement si tu as une debian (ou ubuntu), c´est un pacquet qui s´appelle libfoo) comme tout ceux qui voudront utiliser ton programme, mais il te faut aussi le fichier foo.h (générallement un paquet du nom de libfoo-dev). Et quand tu compile, tu fait :
gcc -lfoo fichier.c
et dans fichier.c il y a la ligne :
- include <foo.h>
et si tu tape :
ldd a.out
tu obtient quelque chose du genre :
libc.so.6 => /lib/libc.so.6 (0x00002b28bff98000)
/lib64/ld-linux-x86-64.so.2 (0x00002b28bfd7b000)
foo.so => /usr/lib/foo.so (0x000000054ff4b446)
qui dit que ton programme a besoin de foo.so pour fonctionner.
Mais il y a une autre possibilité. Tu peut utiliser une bibliothèque statique, alors que foo.so était dynamique. La différence, c´est qu´une bibliothèque statique est dans ton programme et il n´y a pas besoin d´aller la chercher au démarage. C´est parfois un peu plus rapide (mais pas forcément), mais ton programme sera plus gros. Les bibliothèque statique ont générallement l´extension .a (pour archive). Si le paquet libfoo-dev ne contenait seulement foo.h et foo.a (et qu´il n´y a pas de paquet libfoo avec foo.so) alors quand le compilateur verra la ligne
gcc -lfoo fichier.c
et qu´il ne trouvera pas le fichier foo.so et qu´il verra seulement le fichier foo.a, il le mettra dans ton programme. Et la commande ldd, va te dire :
libc.so.6 => /lib/libc.so.6 (0x00002b28bff98000)
/lib64/ld-linux-x86-64.so.2 (0x00002b28bfd7b000)
ton programme n´a plus besoin de foo.so pour fonctionner (ni de foo.a). Si sur ton ordinateur, quand tu compile il y a foo.so et foo.a, le compilateur préférera par défaut toujours foo.so sauf si tu lui ordonne de faire autrement. Et donc ton programme aura besoin des bibliothèque pour fonctionner.
voila, j´espère t´avoir éclairer. Si tu as d´autre questions, n´hésite pas.