PDA

Ver la versión completa : Problemas con mixer



endaramiz
19/07/2010, 17:54
Hola, tengo un compilador para wiz en linux, la versión 4.0.2. El problema es que no tiene las librerías SDL_mixer. La primera solución que se me ha ocurrido ha sido copiar en las carpetas las librerías del toolchain de la zona de descargas:
libSDL_mixer-1.2.so.0
libSDL_mixer-1.2.so.0.2.6
libSDL_mixer.a
libSDL_mixer.la
libSDL_mixer.so
libSDL_mixer.so.lnk
y el .h en sus respectivas carpetas. Pero al compilar tengo un problema en la última fase:
[...]
/usr/local/wizdev/arm-linux/bin/arm-linux-g++ -o game.bin src/buildings.o src/cursor.o [...] src/audio.o -L/usr/local/wizdev/arm-linux/lib/gcc/arm-linux/4.0.2/ -L/usr/local/wizdev/arm-linux/lib -L/usr/local/wizdev/arm-linux/arm-linux/lib -L/usr/local/wizdev/arm-linux/arm-linux/usr/lib -lc -lSDL -lSDL_mixer -lpng12 -lz -lpthread -lm -lts
/usr/local/wizdev/arm-linux/arm-linux/lib/libSDL_mixer.so: file not recognized: File format not recognized
collect2: ld returned 1 exit status
make: *** [game.bin] Error 1

¿Alguna idea? ¿Puede ser porque son versiones muy distintas (4.0.2 a 4.2.4)?. Otra solución sencilla sería usar la nueva versión que lo incluye todo, pero es que no tengo ningún makefile, estoy intentando hacer uno yo mismo pero me resulta muy complicado. ¿Alguien tiene uno de la nueva versión?


Saludos.

bitrider
19/07/2010, 19:20
No puedes mezclar librerías y toolchains. Cada toolchain tiene sus librerías y te soltará este tipo de errores si intentas utilizar las librerías compiladas utilizando otros toolchains.

Tienes dos opciones:

- Bajarte un toolchain y sus respectivas librerías.
- Bajarte un toolchain y compilar con él las librerías que te interesen.

endaramiz
19/07/2010, 20:49
Muchas Gracias. Creo que me va a costar bastante encontrar las librerías para la versión esa antigua. He intentado compilar la librería y no lo consigo. Creo que lo más sencillo es bajarme el toolchain nuevo y compilar usando ese. Así que es lo que he hecho. Pero he intentado compilar y me da error:


/opt/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-c++ src/*.cpp -o main.x -lSDL -lSDL_mixer -I/opt/arm-openwiz-linux-gnu/include/ -L/opt/arm-openwiz-linux-gnu/lib/
/opt/arm-openwiz-linux-gnu/bin/../lib/gcc/arm-openwiz-linux-gnu/4.2.4/../../../../arm-openwiz-linux-gnu/bin/ld: warning: libiconv.so.2, needed by /opt/arm-openwiz-linux-gnu/lib//libSDL.so, not found (try using -rpath or -rpath-link)
/opt/arm-openwiz-linux-gnu/bin/../lib/gcc/arm-openwiz-linux-gnu/4.2.4/../../../../arm-openwiz-linux-gnu/bin/ld: warning: libvorbisidec.so.1, needed by /opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so, not found (try using -rpath or -rpath-link)
/opt/arm-openwiz-linux-gnu/bin/../lib/gcc/arm-openwiz-linux-gnu/4.2.4/../../../../arm-openwiz-linux-gnu/bin/ld: warning: libmad.so.0, needed by /opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so, not found (try using -rpath or -rpath-link)
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `mad_timer_set'
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `mad_timer_zero'
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `ov_clear@libvorbisidec.so.1'
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `mad_synth_frame'
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `mad_stream_init'
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `mad_stream_buffer'
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `mad_frame_init'
/opt/arm-openwiz-linux-gnu/lib//libSDL.so: undefined reference to `libiconv'
/opt/arm-openwiz-linux-gnu/lib//libSDL.so: undefined reference to `libiconv_close'
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `mad_frame_finish'
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `ov_time_seek@libvorbisidec.so.1'
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `mad_stream_finish'
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `ov_open_callbacks@libvorbisidec.so.1'
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `mad_timer_compare'
/opt/arm-openwiz-linux-gnu/lib//libSDL.so: undefined reference to `libiconv_open'
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `mad_synth_init'
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `ov_read@libvorbisidec.so.1'
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `ov_pcm_total@libvorbisidec.so.1'
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `mad_frame_decode'
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `mad_timer_add'
/opt/arm-openwiz-linux-gnu/lib//libSDL_mixer.so: undefined reference to `ov_info@libvorbisidec.so.1'
collect2: ld returned 1 exit status

¿Se podría solucionar con un Makefile?¿He seguido mal las instrucciones al "instalarlo"?¿Alguna idea?

hardyx
19/07/2010, 22:25
Te está pidiendo la libmad y la libvorbisdec, son dependencias de la SDL_mixer. Añade esto al compilador:


-lSDL_mixer -lvorbisidec -lmikmod -lmad

endaramiz
20/07/2010, 01:03
Gracias! Ya he dado un pasito más y he conseguido compilar (bueno, también he añadido -liconv).

/opt/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-c++ src/*.cpp -o main.x -lSDL -lSDL_mixer -lvorbisidec -lmikmod -lmad -liconv -I/opt/arm-openwiz-linux-gnu/include/ -L/opt/arm-openwiz-linux-gnu/lib/
Pero al ejecutar el juego me ha sacado esto por la salida de error:
./game.bin: error while loading shared libraries: libmikmod.so.2: cannot open shared object file: No such file or directory
Y me ha devuelto al menú.

No entiendo mucho de esto, pero creo que a la wiz le falta la librería. ¿He hecho algo mal? ¿O es que tengo que compilar estáticamente? He intentado compilar estáticamente y me pide mil cosas.

Otra cosa que he probado de hacer es compilar sin -lmikmod y compila, solo que se queda colgado en "loading...". ¿Se cuelga porque realmente hace falta mikmod? ¿Quizás es por los parámetros que le he pasado para abrir el audio no son correctos? ¿O es otra cosa? Esta vez no me queda nada escrito en la salida de error :(

Muchas gracias y a ver si al final consigo hacer que funcione la dichosa SDL_mixer (es más complicado de lo que pensaba...).

hardyx
20/07/2010, 11:48
Prueba a poner la libmikmod.so.2 de ARM que te pide a lado del ejecutable, algunas no se incluyen en el firmware o no coinciden las versiones.

Para ver lo que pasa cuando se te queda en "loading..." prueba a lanzar el ejecutable desde Termula. Es una terminal de Linux, y escribe algún error o revienta te lo dirá. Muchas veces esto no se ve si lo direccionas a un fichero, porque sale sin volcar los buffers.

endaramiz
24/07/2010, 17:18
Eyyy muchas gracias!!! Al final ha funcionado con eso de poner las .so junto al ejecutable (aunque me ha pedido unas cuantas). Igualmente eso de Termula parece interesante, lo probaré en cuanto tenga tiempo.

Saludos y gracias