"undefined reference to IMG_Load" avec SDL2_image
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:
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 :
Code:
1 2
| FILE LINE Message
obj\Release\main.o:main.c undefined reference to 'IMG_Load' |
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.
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 :
-lmingw32
-lSDL2main
-lSDL2
-lopengl32
-lglu32
-lSDL2_image
- Dans Project / Build options... / Search directories
j'ai mis dans Compiler :
Code:
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 |
puis dans Linker :
Code:
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 |
- Dans Settings / Compiler
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é
Code:
C:\Program Files (x86)\CodeBlocks\MinGW\lib\libSDL2_image.a
S'ensuit un remplacement similaire dans Settings / Compiler
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 :calim2:
Merci.