[PSP] Problema al usar sdl

Un saludo a la comunidad de EOL :) , el problema que tengo es al tratar de compilar un ejemplo utilizando las librerías SDL; mi makefile es el siguiente:

TARGET = Sdl_Ejemplo
OBJS = main.o

MORE_CFLAGS = -G0 -O2 -Wall

CFLAGS = $(MORE_CFLAGS)
CXXFLAGS = $(MORE_CFLAGS) -fno-exceptions -fno-rtti

STDLIBS = -lSDL -lSDLmain -lpng -ljpeg -lz -lm -lpspsdk -lm

LIBS=$(STDLIBS)$(YOURLIBS)

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = SDL Ejemplo

PSPSDK = $(shell psp-config --pspsdk-path)
PSPBIN = $(shell psp-config --psp-prefix)/bin
include $(PSPSDK)/lib/build.mak

y al compilar me sale lo siguiente:
udefined reference to 'SDL_Quit' ; y así para todas las funciones de SDL.

Les agradecería a quien me pueda ayudar
y al compilar me sale lo siguiente:
udefined reference to 'SDL_Quit' ; y así para todas las funciones de SDL.


En tu codigo cambia SDL_Quit por SDL_QUIT; dentro de sdl esta funcion esta definida completamente en mayusculas.

Espero haberte ayudado.

Saludos!!!

Edito: Lei un poco rapido y no me di cuenta de que dijiste que igual te pasaba con todas las funciones.

primero verifica que has inicializado el sistema de SDL.
luego revisa que has escrito todas las funciones correctamente (tomando en cuenta mayusculas y minusculas).

Si esto esta bien y SDL correctamente instalado, no deberia dar errores de referencia a funciones.

Si te da mas problemas no dudes en preguntar, yo no soy un experto en SDL ni mucho menos, pero tuve que investigar mucho para hacer funcionar SDL en PSP y lo logre, tal vez te puedo servir de ayuda.
Gracias iceman755, pero me sigue dando problemas;
El mensaje de error es el siguiente:

main.o: In function `IniProgram()':
main.cpp:(.text+0x108): undefined reference to `SDL_Quit'
main.cpp:(.text+0x110): undefined reference to `SDL_Quit'
main.o: In function `main':'
main.cpp:(.text+0x1c4): undefined reference to `SDL_Flip'
collect2: ld returned 1 exit status
make: *** [Sdl_Figuras.elf] Error 1

Mi función IniProgram es la siguiente:
int IniProgram()
{
SetupCallbacks();
//Iniciar SDL
if(SDL_Init(SDL_INIT_VIDEO)<0)
return -1;

//Modo de video (ancho,alto,bits de profundidad,vía SW ó HW)
screen=SDL_SetVideoMode(480,272,24,SDL_HWSURFACE);

if(screen==NULL)
return -1;

atexit(SDL_Quit);
return 1;
};

y main()

int main(void)
{
if(IniProgram()!=-1)
{

SDL_Flip(screen);

}
sceKernelSleepThread();
return 0;
};

y nuevamente gracias por tu respuesta.
que es SDL_QUIT cambialo en tu programa

PD_ Tambien SDL_FLIP
Creo que te falta especificarle la libreria que estas utilizando , prueba con -lsdl
Está bien lo que pasa es que tiene puesto SDL_Quit en vez de SDL_QUIT y que la funcion SDL_Flip no está porque si no daría error con todas las funciones
ssssO escribió:Está bien lo que pasa es que tiene puesto SDL_Quit en vez de SDL_QUIT y que la funcion SDL_Flip no está porque si no daría error con todas las funciones
Cuando coloco SDL_QUIT no me reconoce como una función de SDL, y esto (de los mensajes de error undefined reference '') también me ocurre cuando utilizo los operadors new y delete de c++
Buenas,

Estás seguro que tienes las liberías en el directorio correcto?, me explico, los .lib o .a correspondientes a las SDL y SDLmain los tienes en la carpeta lib del compilador? supongo que si, pero miralo por si acaso, creo que ese error tiene algo que ver con esto. Porque compilar compila no? quiero decir, lo que falla es el linker?

Un saludo.

PD: Si eso no te falta, cuelga el fichero del código y el makefile completo para poder mirarlo mejor si es posible, aunque creo que el error es más de la configuración o makefile en todo caso.
MiKeL SnAkE escribió:Buenas,

Estás seguro que tienes las liberías en el directorio correcto?, me explico, los .lib o .a correspondientes a las SDL y SDLmain los tienes en la carpeta lib del compilador? supongo que si, pero miralo por si acaso, creo que ese error tiene algo que ver con esto. Porque compilar compila no? quiero decir, lo que falla es el linker?

Un saludo.

PD: Si eso no te falta, cuelga el fichero del código y el makefile completo para poder mirarlo mejor si es posible, aunque creo que el error es más de la configuración o makefile en todo caso.

Gracias por la respuesta MiKeL SnAkE, ya comprobé la ubicación de las librerías, y asumo que están en el lugar correcto(/lib); en cuanto a mi main.cpp es este:
#include <math.h>
#include <SDL/SDL.h>
#include <pspkernel.h>

// Variables globales:
SDL_Surface *screen=NULL;


// Declaraciones de funciones adelantadas incluidas en este módulo de código:
int IniProgram();


/* Define the module info section */
PSP_MODULE_INFO("Circulo con SDL", 0, 1, 1);

/* Define the main thread's attribute value (optional) */
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

/* Llamada de salida */
int exit_callback(int arg1, int arg2, void *common)
{
          sceKernelExitGame();
          return 0;
};

/* Llamada thread */
int CallbackThread(SceSize args, void *argp)
{
          int cbid;

          cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
          sceKernelRegisterExitCallback(cbid);

          sceKernelSleepThreadCB();

          return 0;
}

/* Configura llamada thread y vuelve a su thread id */
int SetupCallbacks(void)
{
      int thid = 0;

      thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
     if(thid >= 0)
     {
                    sceKernelStartThread(thid, 0, 0);
          }

          return thid;
};
int main(void)
{
   if(IniProgram()!=-1)
   {      
      SDL_Flip(screen);
      
   }
      sceKernelSleepThread();
   return 0;
};

/************************************************************/
int IniProgram()
{
   SetupCallbacks();
   //Iniciar SDL
   if(SDL_Init(SDL_INIT_VIDEO)<0)
      return -1;

   //Modo de video (ancho,alto,bits de profundidad,vía SW ó HW)
   screen=SDL_SetVideoMode(480,272,24,SDL_HWSURFACE);

   if(screen==NULL)
      return -1;
   
   atexit(SDL_Quit);
   return 1;
};

Como se nota,es sólo un ejemplo para probar SDL; este es mi makefile
TARGET = Sdl_Ejemplo
OBJS = main.o

MORE_CFLAGS = -G0 -O2 -Wall

CFLAGS = $(MORE_CFLAGS)
CXXFLAGS = $(MORE_CFLAGS) -fno-exceptions -fno-rtti

STDLIBS = -lSDL -lSDLmain -lpng -ljpeg -lz -lm -lpspsdk -lm

LIBS=$(STDLIBS)$(YOURLIBS)  -LC:/pspdev/psp/lib -lSDL -lm -lGL -lpspvfpu

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = SDL Ejemplo

PSPSDK = $(shell psp-config --pspsdk-path)
PSPBIN = $(shell psp-config --psp-prefix)/bin
include $(PSPSDK)/lib/build.mak


Y nuevamente gracias por la ayda.
Prueba esta chorradilla a ver si es eso:

en el include de <SDL/SDL.h> cambialo a "SDL/SDL.h" con las comillas. Si no es eso seguiremos probando...


Un saludo.
Ya cambié el include, pero sigue sin funcionar...
Buenas otra vez,

A ver veamos prueba este makefile:

TARGET = Sdl_Ejemplo
OBJS = main.o

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = SDLEjemplo

PSPSDK = $(shell psp-config --pspsdk-path)
PSPBIN = $(shell psp-config --psp-prefix)/bin
SDL_CONFIG = $(PSPBIN)/sdl-config

DEFAULT_CFLAGS = $(shell $(SDL_CONFIG) --cflags)
MORE_CFLAGS = -G0 -O2 -Wall

CFLAGS = $(DEFAULT_CFLAGS)  $(MORE_CFLAGS)
CXXFLAGS = $(DEFAULT_CFLAGS)  $(MORE_CFLAGS) -fno-exceptions -fno-rtti

STDLIBS = -lSDL -lSDLmain -lpng -ljpeg -lz -lm -lpspsdk -lm

LIBS=$(STDLIBS) $(YOURLIBS)  -L"C:/pspdev/psp/lib" -lSDL -lm -lGL -lpspvfpu $(shell $(PSPBIN)/sdl-config --libs)

include $(PSPSDK)/lib/build.mak


Y asegurate de tener en la carpeta include dentro de otra carpeta SDL los .h y lo de las lib (que ya lo hiciste pero las .h deben estar dentro de la carpeta SDL dentro de include).

A ver como te va, yo te lo probaría pero aun no he hecho nada para PSP.

Un saludo, y si no funciona seguiremos mirando... (siento tantas pruebas :S)

PD: modifiqué el makefile guiandome con: http://crysol.org/node/746 por si te sirve de más ayuda
Gracias MiKeL SnAkE, pero me sigue sin funcionar; y el problema sólo lo tengo con las SDL, porque con otras librerías como OSlib, me funciona perfectamente.
No se, pero a lo que instalé las librerías me creó un directorio inlude junto al include donde se encuentran las SDL, y aquí también se instalaron algunos archivos .h de SDL (La mayoría son los mismos que están en la carpeta SDL); no se si algo tiene que ver.
Buenas otra vez mas,

Por ahora no me des las gracias que no hemos conseguido nada... :(
A ver, eso que dices me resulta raro, lo conveniente sería que alguien que ya tenga las SDL para PSP puestas comente si eso es lo normal. Pero yo siempre que las he usado están en la misma carpeta include que todos los demás .h. No se si te entiendo bien, pero yo creo que debería quedar la cosa así:

Carpeta include: todos los .h de siempre y una carpeta adicional con las de SDL (me he fijado que en algunos casos, sin encontrar los de psp, estas estan en la misma carpeta include que todos los demas .h, si este es tu caso y no hay carpeta SDL, en los includes del codigo habría que quitar el SDL/)
Carpeta lib: Las librerías correspondientes (nose si para psp son .a o .lib)

Comprueba eso otra vez no vaya a ser que es esa tontería, esque eso de la doble carpeta include nunca lo he visto. Y de todas formas si sigue sin ir, dime por favor de donde bajaste las SDL para psp ok? a ver si puedo mirar algo más.

Un saludo y siento tanto lio para nada... a ver si viene algún experto, sino tarde o temprano saldra el fallo.
Voy a suponer que usas el cygwin ya q eres guindousero, si no lo usas olvidate. Una vez hecho este paso, recuerdo que el mismo script que instalaba el toolchain, tb tenia otro llamado psplibraries, que tal y como su nombre indica te descargaba todas las librerias y te las instalaba automaticamente. En caso de hacerlo manual y dando por hecho que la SDL la has conseguido desde ps2dev.org, mas concretamente desde su svn. Entonces tan solo has de ir leyendo el README.PSP que hay en cada libreria, sdl, sdl_mixer, etc y teclear esos comandos en el cygwin, para que la libreria se compile correctamente.
Es decir Eskematico que no lo podré hacer nada con SDL con el PSPDev, y me podrías decir de donde descargo el toolchain, para poder trabajar bajo cygwin.
El toolchain, al igual q las librerias y cualquier otra cosa para la psp, las encontraras en ps2dev.org. Tambien podras encontrar tutoriales en internet sobre como instalar el cygwin y las toolchain
16 respuestas