Bonjour,
Après avoir passé de nombreuses heures à arpenter le web à la recherche d'explications, d'informations (ce qui fut tout de même instructif), le résultat est toujours le même et c'est bien désemparé que je m'adresse à vous.
J'utilise CodeBlocks sous Windows7.
Voici mon code, très simple, qui fonctionnait avec la fonction SDL_LoadBMP.
J'ai simplement remplacé cette fonction par IMG_Load() après avoir installé SDL2_image :
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 #include <SDL2/SDL.h> #include <SDL2/SDL_image.h> #include <stdlib.h> #include <stdio.h> #include <math.h> #include <GL/gl.h> #include <GL/glu.h> int main(int argc, char *argv[]) { SDL_Window *pWindow = NULL; pWindow = SDL_CreateWindow("fentre",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,800,800,SDL_WINDOW_RESIZABLE); SDL_Renderer *pRenderer = NULL,*nRend=NULL; pRenderer = SDL_CreateRenderer(pWindow,-1,SDL_RENDERER_ACCELERATED); SDL_Surface *pSprite = NULL,*pSprite2=NULL; pSprite = IMG_Load("lac_en_montagne.bmp"); pSprite2 =IMG_Load("zozor.bmp"); SDL_Texture *pTexture = NULL,*pTexture2=NULL; pTexture = SDL_CreateTextureFromSurface(pRenderer,pSprite); pTexture2 = SDL_CreateTextureFromSurface(pRenderer,pSprite2); SDL_Rect rect = {0,0,800,800}; SDL_Rect rect2 = {150,150,pSprite2->w,pSprite2->h}; SDL_RenderCopy(pRenderer,pTexture,NULL,&rect); SDL_RenderCopy(pRenderer,pTexture2,NULL,&rect2); SDL_RenderPresent(pRenderer); SDL_Delay(4000); SDL_DestroyTexture(pTexture); SDL_DestroyTexture(pTexture2); SDL_FreeSurface(pSprite); SDL_FreeSurface(pSprite2); SDL_DestroyRenderer(pRenderer); SDL_DestroyWindow(pWindow); SDL_Quit(); }
Après compilation, il m'indique exactement :
Le problème vient du fait - apparemment - qu'il ne trouve pas la bibliothèque SDL_image. Pourtant, j'ai l'impression d'avoir essayé toutes les possibilités jusqu'aux plus absurdes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 FILE LINE Message obj\Release\main.o:main.c undefined reference to 'IMG_Load'
Voici ce que j'ai fait dans un premier temps (Installation):
- Dans C:\Program Files (x86)\CodeBlocks
j'ai mis les dossiers SDL2-2.0.1 et SDL2_image-2.0.0 à côté du dossier MinGW.
- Dans C:\Program Files (x86)\CodeBlocks\MinGW\include
j'ai mis le dossier SDL2 dans lequel est contenu les .h de SDL2 ainsi que SDL_image.h
- Dans C:\Program Files (x86)\CodeBlocks\MinGW\lib
j'ai copié/collé les .a contenus dans C:\Program Files (x86)\CodeBlocks\SDL2_image-2.0.0\x86_64-w64-mingw32\lib
ainsi que ceux contenus dans C:\Program Files (x86)\CodeBlocks\SDL2-2.0.1\x86_64-w64-mingw32\lib
- Dans C:\Users\robert\ArnaudC\Plz\bin (où ArnaudC est le dossier de mon programme Plz).
j'ai mis les dll des dossiers SDL2 et SDL2_image (que ce soit dans Debug ou Release)
~~~~~Cette dernière ligne s'explique par le fait que j'ai fait la compilation aussi bien sous Build / Select target / Debug que sous / Release. ~~~~
Ensuite, j'ai essayé de linker les bibliothèques (linkage) :
1er TEST :
- Dans Project / Build options... / Linked settings
j'ai mis dans Other linker options :
- Dans Project / Build options... / Search directories-lmingw32 -lSDL2main -lSDL2 -lopengl32 -lglu32 -lSDL2_image
j'ai mis dans Compiler :
puis dans Linker :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 C:\Program Files (x86)\CodeBlocks\SDL2-2.0.1\x86_64-w64-mingw32\include\SDL2 C:\Program Files (x86)\CodeBlocks\SDL2_image-2.0.0\x86_64-w64-mingw32\include\SDL2
- Dans Settings / Compiler
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 C:\Program Files (x86)\CodeBlocks\SDL2-2.0.1\x86_64-w64-mingw32\lib C:\Program Files (x86)\CodeBlocks\SDL2_image-2.0.0\x86_64-w64-mingw32\lib
j'ai remis ce qui est écrit juste au-dessus.
2eme TEST :
- Dans Project / Build options... / Linked settings
j'ai juste retiré dans Other linker options lSDL2_image puis j'ai ajoutéS'ensuit un remplacement similaire dans Settings / Compiler
Code : Sélectionner tout - Visualiser dans une fenêtre à part C:\Program Files (x86)\CodeBlocks\MinGW\lib\libSDL2_image.a
Je ne vais pas faire une liste exhaustive de ce que j'ai fait, mais ça peut vous donner une idée. J'ai l'impression d'avoir tout tenté. Mais dans le message d'erreur, la ligne qui précède le undefined reference to 'IMG_Load, à savoir obj\Release\main.o:main.c, semble être vouloir me dire quelque chose. Mais je ne sais pas traduire
Merci.
Partager