PDA

Ver la versión completa : Enlazar SDL_mixer y Visual Studio



maRRRc!
12/08/2007, 17:20
Hola,

he seguido esta guía (http://wiki.gp2x.org/wiki/Using_Visual_C_2005_Express_Edition) para poder utilizar el Visual Studio para compilar para la gp2x. Lo que se hace es con un plantilla decirle al VS que compile con el gcc en lugar de su propio compilador.

Después de arreglar un par de cosillas que no iban bien, conseguí compilar, enlazar y ejecutar un ejemplillo que solo utiliza SDL y SDL_image.

Ahora estoy intentando hacer lo mismo pero con SDL_mixer y que reproduzca un ogg, pero no hay manera.
Las bibliotecas que tengo instaladas son las SDL aceleradas por hardware, y para el resto, el pack de librerías alternativas que hay en la sección de descargas.

Este es el log del error:
------ Operación Generar iniciada: proyecto: prova2, configuración: Debug Win32 ------
Linking prova2.gpe...
C:\devkitpro\devkitGP2X\lib\SDL\libSDL_mixer.a(mus ic_ogg.o): In function `OGG_playAudio':
music_ogg.c .text+0x180): undefined reference to `ov_read'
music_ogg.c .text+0x1ac): undefined reference to `ov_info'
C:\devkitpro\devkitGP2X\lib\SDL\libSDL_mixer.a(mus ic_ogg.o): In function `OGG_delete':
music_ogg.c .text+0x2dc): undefined reference to `ov_clear'
C:\devkitpro\devkitGP2X\lib\SDL\libSDL_mixer.a(mus ic_ogg.o): In function `OGG_jump_to_time':
music_ogg.c .text+0x310): undefined reference to `ov_time_seek'
C:\devkitpro\devkitGP2X\lib\SDL\libSDL_mixer.a(mus ic_ogg.o): In function `OGG_new':
music_ogg.c .text+0x374): undefined reference to `ov_open'
C:\devkitpro\devkitGP2X\lib\SDL\libSDL_mixer.a(mus ic_ogg.o): In function `OGG_new_RW':
music_ogg.c .text+0x45c): undefined reference to `ov_open_callbacks'
C:\devkitpro\devkitGP2X\lib\SDL\libSDL_mixer.a(loa d_ogg.o): In function `Mix_LoadOGG_RW':
load_ogg.c .text+0x10c): undefined reference to `ov_open_callbacks'
load_ogg.c .text+0x194): undefined reference to `ov_info'
load_ogg.c .text+0x1e8): undefined reference to `ov_pcm_total'
load_ogg.c .text+0x238): undefined reference to `ov_read'
load_ogg.c .text+0x254): undefined reference to `ov_clear'
load_ogg.c .text+0x29c): undefined reference to `ov_read'


Parece ser que se hace un lio con la del ogg, del vorbis o que se yo :S
La orden para enlazar, (porque compilar compila perfectamente) generada es esta:
arm-linux-gcc.exe Debug\*.o -o prova2.gpe -LC:\devkitpro\devkitGP2X\lib\ -LC:\devkitpro\devkitGP2X\lib\SDL -lSDL_image -lvorbis -lvorbisfile -logg -lSDL_mixer -lsmpeg -lSDL -lpthread -lstdc++ -lm -static 2>&1

Si alguien sabe que falla, si es un problema de las bibliotecas o lo que sea, le estaré eternamente agradecido ;)

PD: También he probado con el sdk oficial, pero aparte de que no me compila, el devcpp no me gusta :S

swapd0
12/08/2007, 18:02
Cuando falla el linkador es porque te faltan librerias, las ov_xxx estan definidas en la libreria libov.a, asi que tendas que añadir esta libreria.

PD: lo he sacado buscando en internet, yo no uso las SDL.

maRRRc!
12/08/2007, 20:10
Esto de las bibliotecas me lleva un poco de cabeza :S

Toda la mañana buscando soluciones, y en la última búsqueda que hago, me sale un post (en google) de este foro con una solución (y eso que ya había buscado antes con el propio buscador de aquí). De hecho, creo que lo había intentado antes, pero no lo habré hecho bien :P.

Parece ser que el orden de las bibliotecas debe de ser el siguiente:
-lSDLmain -lSDL_mixer -lsmpeg -lvorbisfile -lpthread -lvorbis -logg -lSDL -lm

Edito: El problema ahora es que se cuelga el programa al llegar a la llamada que carga el fichero con el audio :S

Re Edito: Con las bibliotecas de guyfawkes va todo como la seda ;)