Je suis en train de suivre le tuto du Site du Zéro sur le SDL.
Voici par exemple le code qui me pose problème sur la GP2X:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <SDL/SDL.h> /* GP2X button mapping */ enum MAP_KEY { VK_UP , // 0 VK_UP_LEFT , // 1 VK_LEFT , // 2 VK_DOWN_LEFT , // 3 VK_DOWN , // 4 VK_DOWN_RIGHT , // 5 VK_RIGHT , // 6 VK_UP_RIGHT , // 7 VK_START , // 8 VK_SELECT , // 9 VK_FL , // 10 VK_FR , // 11 VK_FA , // 12 VK_FB , // 13 VK_FX , // 14 VK_FY , // 15 VK_VOL_UP , // 16 VK_VOL_DOWN , // 17 VK_TAT // 18 }; /* The screen surface, joystick device */ SDL_Surface *screen = NULL; SDL_Joystick *joy = NULL; void Terminate(void) { SDL_Quit(); #ifdef GP2X chdir("/usr/gp2x"); execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL); #endif } int main (int argc, char *argv[]) { SDL_Surface *backgroundImage = NULL; SDL_Rect positionBackground; positionBackground.x = positionBackground.y = 0; int done; /* Initialize SDL */ if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK) < 0) { fprintf (stderr, "Couldn't initialize SDL: %s\n", SDL_GetError ()); exit (EXIT_FAILURE); } atexit (Terminate); SDL_ShowCursor(SDL_DISABLE); #ifndef GP2X /* Set 640x480 16-bits video mode */ if ((screen = SDL_SetVideoMode (800, 600, 16, SDL_HWSURFACE)) == NULL) { fprintf (stderr, "Couldn't set 640x480x16 video mode: %s\n", SDL_GetError ()); exit (EXIT_FAILURE); } SDL_WM_SetCaption("Chargement d'image en SDL", NULL); /* Chargement d'une image Bitmap dans une surface */ backgroundImage = SDL_LoadBMP("images/lac_en_montagne.bmp"); #endif #ifdef GP2X /* Set 320x240 16-bits video mode */ if ((screen = SDL_SetVideoMode (320, 240, 16, SDL_HWSURFACE)) == NULL) { fprintf (stderr, "Couldn't set 320x240x16 video mode: %s\n", SDL_GetError ()); exit (EXIT_FAILURE); } /* Chargement d'une image Bitmap dans une surface */ backgroundImage = SDL_LoadBMP("images/lac_en_montagne_gp2x.bmp"); #endif /* Check and open joystick device */ if (SDL_NumJoysticks() > 0) { joy = SDL_JoystickOpen(0); if(!joy) { fprintf (stderr, "Couldn't open joystick 0: %s\n", SDL_GetError ()); } } /* On blitte (colle) par-dessus l'écran */ SDL_BlitSurface(backgroundImage, NULL, screen, &positionBackground); SDL_Flip(screen); // Mise à jour de l'écran done = 0; while (!done) { SDL_Event event; /* Check for events */ while (SDL_PollEvent (&event)) { switch (event.type) { case SDL_KEYDOWN: /* if press Ctrl + C, terminate program */ if ( (event.key.keysym.sym == SDLK_c) && (event.key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) ) done = 1; break; case SDL_KEYUP: break; case SDL_JOYBUTTONDOWN: /* if press Start button, terminate program */ if ( event.jbutton.button == VK_START ) done = 1; break; case SDL_JOYBUTTONUP: break; case SDL_QUIT: done = 1; break; default: break; } } /* Processing */ } SDL_FreeSurface(backgroundImage); return EXIT_SUCCESS; }
La compilation se déroule sans problème. Sous macosx, je lie de manière dynamique la SDL. Sous gp2x, je compile statiquement.
Sous macosx, aucun problème. Sous gp2x, un ecran noir s'affiche et je suis contraints d'étaindre la GP2X. Où ce situe le problème?
Voici les makefiles
Pour OSX
PLATFORM=OSX SDL_BASE=/sw/bin/ LDFLAGS= CC=gcc CXX=g++ STRIP=strip CFLAGS=`$(SDL_BASE)sdl-config --cflags` -O2 -Wall -Werror CXXFLAGS=`$(SDL_BASE)sdl-config --cflags` -O2 -Wall -Werror LIBS=`$(SDL_BASE)sdl-config --libs` BUILD_DIR = ./build/osx/ TARGET=$(BUILD_DIR)SDL-2 include Makefile.in
Pour GP2X:
PLATFORM=GP2X CROSS_COMPILE=/Volumes/GP2XSDK/bin/arm-gp2x-linux- SDL_BASE=/Volumes/GP2XSDK/arm-gp2x-linux/bin/arm-linux- LDFLAGS=-static CC=$(CROSS_COMPILE)gcc CXX=$(CROSS_COMPILE)g++ STRIP=$(CROSS_COMPILE)strip CFLAGS=`$(SDL_BASE)sdl-config --cflags` -O2 -Wall -Werror CXXFLAGS=`$(SDL_BASE)sdl-config --cflags` -O2 -Wall -Werror LIBS=`$(SDL_BASE)sdl-config --libs` BUILD_DIR = ./build/gp2x/ TARGET=$(BUILD_DIR)SDL.gpe include Makefile.in
Le makefile.in
SRC_DIR = ./src/ OBJS=$(BUILD_DIR)main.o ALL_TARGETS=$(TARGET) all: $(ALL_TARGETS) $(TARGET): $(OBJS) $(CC) -D$(PLATFORM) $(LDFLAGS) -o $(TARGET) $(OBJS) $(LIBS) $(CFLAGS) $(STRIP) $(TARGET) $(BUILD_DIR)main.o: $(SRC_DIR)main.c $(CC) $(CFLAGS) -o $@ -c $< clean: rm $(BUILD_DIR)*.o $(TARGET)
D'avance merci de votre aide.
PS: pour ceux que cela intéresse, voici le SDK officiel adapté pour MacOSX
