#1 Le 21/11/2013, à 17:53
- kinezana
include SDL_Image dans Code::Blocks
Salut tout le monde.
Je voudrais include la bibliothèque SDL_Image.h dans mon code C, j'ai essayé de l'installer en faisant :
sudo apt-get install libsdl-image1.2-dev
Mais ça ne suffit pas.
Je ne sais pas où me rendre dans Code::Blocks pour ajouter un chemin vers le fichier qu'il faut, ni quel est ce fichier.
Pour ce dernier problème, j'ai quand même une petite liste obtenu après avoir fait
locate libsdl-image
qui me donne ça (à part quelques trucs dans le répertoire local de Steam qui ne sont sûrement pas ce que je veux) :
/usr/share/doc/libsdl-image1.2
/usr/share/doc/libsdl-image1.2/README
/usr/share/doc/libsdl-image1.2/changelog.Debian.gz
/usr/share/doc/libsdl-image1.2/copyright
/usr/share/lintian/overrides/libsdl-image1.2
/var/cache/apt/archives/libsdl-image1.2_1.2.12-4ubuntu1_i386.deb
/var/lib/dpkg/info/libsdl-image1.2:i386.list
/var/lib/dpkg/info/libsdl-image1.2:i386.md5sums
/var/lib/dpkg/info/libsdl-image1.2:i386.postinst
/var/lib/dpkg/info/libsdl-image1.2:i386.postrm
/var/lib/dpkg/info/libsdl-image1.2:i386.shlibs
/var/lib/dpkg/info/libsdl-image1.2:i386.symbols
Question : quel est le fichier à linker, et où le faire ?
Merci
Hors ligne
#2 Le 23/11/2013, à 09:32
- darunia_goron
Re : include SDL_Image dans Code::Blocks
Les noms des paquets ne sont pas exactement les même que les noms des bibliothèques.
Utilise :
pkg-config --cflags sdl
et
pkg-config --libs sdl
pour connaître les includes et le linkage.
Tu as également intérêt à utiliser les commandes ci-dessus lors de la compilation. Ça rendra ton code plus portable.
Hors ligne
#3 Le 23/11/2013, à 12:29
- kinezana
Re : include SDL_Image dans Code::Blocks
Ok donc j'ai un peu avancé, je crois que SDL_Image est bien intégré au projet
J'ai mis la ligne #include <SDL/SDL_image.h>
Quand je veux compiler ça me dit :
"référence indéfinie vers IMG_Load" (une fonction de SDL_image)
mais pourtant SDL_image est bien intégré puisque quand je commente (//) la ligne #include ça me dit que IMG_Load n'est pas déclarée...
Donc je ne comprends pas trop
Hors ligne
#4 Le 23/11/2013, à 12:54
- darunia_goron
Re : include SDL_Image dans Code::Blocks
Il y a deux phases à la création d'un exécutable :
- La compilation qui transforme le code (fichier .c) en objet (fichier .o), exemple :
gcc -c toto.c -o toto.o
gcc -c tata.c -o tata.o
- Le linkage qui assemble les objets pour créer un programme, exemple :
gcc toto.o tata.o -o mon_programme
Quand tu utilises
gcc fichier.c -o mon programme
gcc se charge de réaliser les deux étapes ci-dessus de manière transparente.
Dans ton cas, au moment de la création des objets, gcc est capable de trouver les fichier .h (les headers de la bibliothèque SDL). En revanche, au moment du linkage, il ne sait pas comment relier tes objets avec la bibliothèque SDL (libSDL.so). Pour cela, tu dois utiliser l'option -l de gcc pour explicitement lui dire quelle bibliothèque utiliser.
En bref, utilise :
#include <SDL_image.h>
Compile avec :
gcc -c toto.c -o toto.o $(pkg-config --cflags sdl)
gcc toto.o tata.o -o mon_programme $(pkg-config --libs sdl) -lSDL_image
Tu dois spécifier -lSDL_image.
pkg-config se chargera pour toi de faire les includes et les autres linkages qui vont bien.
Dernière modification par darunia_goron (Le 23/11/2013, à 13:09)
Hors ligne
#5 Le 23/11/2013, à 15:46
- kinezana
Re : include SDL_Image dans Code::Blocks
Merci beaucoup, ça marche et j'ai compris.
C'est cool d'avoir pris le temps d'expliquer et détailler, j'apprécie
Hors ligne