GCC: pourquoi l'argument -lSDL?

Le tutoriel en ligne vous pose quelques problèmes ? C'est ici pour en parler !

GCC: pourquoi l'argument -lSDL?

Messagede YuGiOhJCJ le 04 Avr 2006 12:31

Salut,
je me demandais pourquoi je dois rajouter l'argument -lSDL lorsque je compile une source utilisant la librairie SDL.
Et surtout comment le savoir qu'il fallait rajouter cet argument à la commande de compilation?
Je sais que les librairies se trouvent dans le répertoire /usr/lib mais bon je ne comprends toujours pas pourquoi utiliser -lSDL car ce n'est pas écrit dans la doc de GCC ni dans la doc de SDL(enfin en tout cas j'ai pas trouvé).
Merci de m'éclairer la dessus.
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 04 Avr 2006 12:47

-lSDL sert à linker avec la lib SDL.

du coté de gcc :

quand tu ajoutes une option -l<blabla>, gcc cherche le fichier libblabla.a d'abord dans les chemin passés en paramètre avec l'option -L/chemin/vers/mes/lib puis dans les chemins des lib par défaut données à la compilation de gcc. (habituellement /usr/lib)

du coté deSDL :

Tu te doute bien que quand tu fais appel aux fonction SDL comme SDL_PollEvent ou autre, il y a bien du code C (ou autre) qui est exécuté quelque part, don clogiquement tu te dis qu'il y a une lib avec laquelle tu dois linker !
Maintenant, tu vas me dire que quand tu fais des printf, tu ne link avec rien... Et bien c'est faut, gcc link TOUJOURS tes programmes avec la libc (/lib/libc.so.6 sous linux) par defaut (il y a une option pour le virer si tu ne le veux pas) et si tu fais du C++, g++ link aussi avec libstdc++.so.6 (6 depuis gcc 3.4, avant c'était 5, mais il y a eu de gros changements depuis, c'est pour ça que tu ne peux pas mélanger du code c++ compilé avec gcc 3.3 et gcc 3.4 et +)

Maintenant, comment savoir qu'il fallait utiliser -lSDL et pas un autre ?

1) c'est bien présent dans la doc sur le site officiel, il faut juste chercher un peu.

2) SDL fourni un utilitaire qui s'appelle sdl-config (décrit aussi dans la doc) qui te permet de la savoir

3) Quand j'installe une nouvelle lib de dévelopement, j'ai toujours le réflexe (sur debian) de faire un "dpkg -L libmalib-dev | grep lib" (dans le cas de SDL donc dpkg -L libsdl1.2-dev | grep lib) ce qui me donne les fichiers installés par le package libsdl1.2-dev dans le dossier lib, généralement, il n'y en a que 2 (le fichier .a pour linker et le .so pour exécuter) et donc je vois totu de suite avec quoi il faut que je link mon truc ;)
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

libSDL.a

Messagede YuGiOhJCJ le 04 Avr 2006 13:53

Ah d'accord.
Effectivement il y a bien le fichier:
/usr/lib/libSDL.a

Donc quand je fais:
gcc -lSDL fichier.c
Ca va me chercher ce fichier.

Merci je dormirai moins idiot ce soir ;)
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede YuGiOhJCJ le 06 Avr 2006 13:49

J'ai remarqué qu'il existe une autre librairie SDL:
Code: Tout sélectionner
/usr/lib/libSDL.a
/usr/lib/libSDLmain.a
...


Or, lorsque je compile, je ne précise pas -lSDLmain à la commande gcc.
Et la compilation réussi :-k

A quoi sert cette librairie libSDLmain.a si sans informer le compilateur de son existance, le programme se compile quand même? :goutte:

Si tu as la réponse merci encore

:goutter:
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 06 Avr 2006 15:47

c'est une "ancienne" lib, elle ne contient plus rien (tout a été déplacé dans libSDL.a) mais elle est là pour des raison de compatibilité avec certains vieux programmes qui link avec -lSDLmain pour ne pas qu'ils plantent à la compilation parce qu'ils ne trouvent pas libSDLmain.a

tu peux voir les symboles (= fonctions, variables globales) définies dans une lib (et beaucoup d'autres choses aussi) avec l'utilitaire "nm"

par exemple :
Code: Tout sélectionner
nm --defined-only /usr/lib/libSDLmain.a

te donne tout les "objets" (variables et fonctions) qui sont dans cette lib et que tu "récupère" quand tu link avec (en l'occurence, il n'y a rien car cette lib est vide)

si tu essais avec /usr/lib/libSDL.a, tu retrouveras toutes les fonctions SDL que tu connais déjà ;) (et beaucoup d'autres !)
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Génial

Messagede YuGiOhJCJ le 06 Avr 2006 23:10

:pouce: Merci.
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer


Retourner vers Besoin d'aide en SDL ?

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron