PDA

Ver la versión completa : problema con SDL



Aiken
21/09/2003, 03:14
Hola ...

No hay forma, no consigo compilar con SDL.

Creo que tengo algo de configuracion chungo ...
No se si sera el Makefile o que, pero no puedo linkar con el
SDL_mixer, el SDL normal parece que si.

A ver si alguien me echa un cable.
Me dice esto:

gcc -o sdltest.elf crt0.o gpstart.o gpmain.o -Tlnkscript user_init.o -nostartfi
es -lm -lgpos -lgpstdio -lgpstdlib -lgpsound -lgpmem -lgpgraphic -lgpfont -lSD
_image -ljpeg -lpng -lz -lm -lSDL -lgpstdio -lSDL_mixer
c:\minigp32\bin\..\lib\gcc-lib\arm-agb-elf\3.2.2\..\..\..\..\arm-agb-elf\lib\li
SDL_mixer.a(mixer.o): In function `mix_channels':
mixer.o(.text+0x2cc): undefined reference to `SDL_MixAudio'
mixer.o(.text+0x43c): undefined reference to `SDL_MixAudio'
c:\minigp32\bin\..\lib\gcc-lib\arm-agb-elf\3.2.2\..\..\..\..\arm-agb-elf\lib\li
SDL_mixer.a(mixer.o): In function `Mix_LoadWAV_RW':
mixer.o(.text+0x95c): undefined reference to `SDL_LoadWAV_RW'
mixer.o(.text+0x9ec): undefined reference to `SDL_FreeWAV'
mixer.o(.text+0xa48): undefined reference to `SDL_FreeWAV'
mixer.o(.text+0xa5c): undefined reference to `SDL_FreeWAV'
c:\minigp32\bin\..\lib\gcc-lib\arm-agb-elf\3.2.2\..\..\..\..\arm-agb-elf\lib\li
SDL_mixer.a(wavestream.o): In function `WAVStream_PlaySome':
wavestream.o(.text+0x2e8): undefined reference to `SDL_MixAudio'
c:\minigp32\bin\..\lib\gcc-lib\arm-agb-elf\3.2.2\..\..\..\..\arm-agb-elf\lib\li
SDL_mixer.a(mplayer.o): In function `getrandom':
mplayer.o(.text+0x10): undefined reference to `GpRand'
c:\minigp32\bin\..\lib\gcc-lib\arm-agb-elf\3.2.2\..\..\..\..\arm-agb-elf\lib\li
SDL_mixer.a(mix.o): In function `update_tremolo':
mix.o(.text+0x3c0): undefined reference to `sin'
c:\minigp32\bin\..\lib\gcc-lib\arm-agb-elf\3.2.2\..\..\..\..\arm-agb-elf\lib\li
SDL_mixer.a(resample.o): In function `update_vibrato':
resample.o(.text+0x500): undefined reference to `sin'
c:\minigp32\bin\..\lib\gcc-lib\arm-agb-elf\3.2.2\..\..\..\..\arm-agb-elf\lib\li
SDL_mixer.a(filter.o): In function `kaiser':
filter.o(.text+0x180): undefined reference to `sqrt'
c:\minigp32\bin\..\lib\gcc-lib\arm-agb-elf\3.2.2\..\..\..\..\arm-agb-elf\lib\li
SDL_mixer.a(filter.o): In function `designfir':
filter.o(.text+0x250): undefined reference to `sin'
filter.o(.text+0x27c): undefined reference to `log'
filter.o(.text+0x28c): undefined reference to `exp'
collect2: ld returned 1 exit status
c:\minigp32\bin\..\lib\gcc-lib\arm-agb-elf\3.2.2\..\..\..\..\arm-agb-elf\lib\li
SDL_mixer.a(mixer.o): In function `mix_channels':
mixer.o(.text+0x2cc): undefined reference to `SDL_MixAudio'
mixer.o(.text+0x43c): undefined reference to `SDL_MixAudio'
c:\minigp32\bin\..\lib\gcc-lib\arm-agb-elf\3.2.2\..\..\..\..\arm-agb-elf\lib\li
SDL_mixer.a(mixer.o): In function `Mix_LoadWAV_RW':
mixer.o(.text+0x95c): undefined reference to `SDL_LoadWAV_RW'
mixer.o(.text+0x9ec): undefined reference to `SDL_FreeWAV'
mixer.o(.text+0xa48): undefined reference to `SDL_FreeWAV'
mixer.o(.text+0xa5c): undefined reference to `SDL_FreeWAV'
c:\minigp32\bin\..\lib\gcc-lib\arm-agb-elf\3.2.2\..\..\..\..\arm-agb-elf\lib\li
SDL_mixer.a(wavestream.o): In function `WAVStream_PlaySome':
wavestream.o(.text+0x2e8): undefined reference to `SDL_MixAudio'
c:\minigp32\bin\..\lib\gcc-lib\arm-agb-elf\3.2.2\..\..\..\..\arm-agb-elf\lib\li
SDL_mixer.a(mplayer.o): In function `getrandom':
mplayer.o(.text+0x10): undefined reference to `GpRand'
c:\minigp32\bin\..\lib\gcc-lib\arm-agb-elf\3.2.2\..\..\..\..\arm-agb-elf\lib\li
SDL_mixer.a(mix.o): In function `update_tremolo':
mix.o(.text+0x3c0): undefined reference to `sin'
c:\minigp32\bin\..\lib\gcc-lib\arm-agb-elf\3.2.2\..\..\..\..\arm-agb-elf\lib\li
SDL_mixer.a(resample.o): In function `update_vibrato':
resample.o(.text+0x500): undefined reference to `sin'
c:\minigp32\bin\..\lib\gcc-lib\arm-agb-elf\3.2.2\..\..\..\..\arm-agb-elf\lib\li
SDL_mixer.a(filter.o): In function `kaiser':
filter.o(.text+0x180): undefined reference to `sqrt'
c:\minigp32\bin\..\lib\gcc-lib\arm-agb-elf\3.2.2\..\..\..\..\arm-agb-elf\lib\li
SDL_mixer.a(filter.o): In function `designfir':
filter.o(.text+0x250): undefined reference to `sin'
filter.o(.text+0x27c): undefined reference to `log'
filter.o(.text+0x28c): undefined reference to `exp'
make: *** [sdltest.elf] Error 1

chui
21/09/2003, 03:34
Ese problema es tipico al lincar con gcc sin archivo .lo. Cambia el -lSDL_mixer de lugar y desaparece.

Aiken
21/09/2003, 11:41
La osti !! Ahora funciona !! Poniendo el -lSDL_mixer el primero ...
Que es lo del fichero .lo. ??
No lo he entendido bien. Aunque ya me funciona, pero ... por si
me pasa otra vez ... que hay que poner el -lSDL_mixer en algun lugar concreto ??

Asi me funciona:
gcc -o sdltest.elf crt0.o gpstart.o gpmain.o -Tlnkscript user_init.o -nostartfil
es -lSDL_mixer -lm -lgpos -lgpstdio -lgpstdlib -lgpsound -lgpmem -lgpgraphic -lg
pfont -lSDL_image -ljpeg -lpng -lz -lm -lSDL -lgpstdio


Graaaaaaacias Chui, por la ayuda, y por las librerias ;)
Aiken

chui
21/09/2003, 12:37
Es un problema de dependencias entre librerias; el linker no recurre a las librerias anterios. Por ejmplo si tienes una libreria llamada libgpstdlib.a que depende de libgpstdio.a, si la linea de linkaje es -lgpstdio -lgpstdlib, el linker no encuentra las funciones de libgpstdio que necesita en libgpstdlib.

Los ficheros .lo son una descripcion de la libreria y las funciones que tiene. Con esto el linker no se pierde. Pero no hay .lo que yo sepa en ninguna de las librerias para GP32. Asi que a ordenar las librerias por orden inverso de dependencias.

Aiken
21/09/2003, 14:15
Okis ...

Cual son las dependencias entre SDL, SDL_mixer y SDL_image?
Supongo que poniendolas siempre en el mismo orden nos podemos olvidar de los problemas de dependencias ....


Ah!! Otro problemilla ... tengo una asignacion de arrays con problemillas. dice "iso c++ forbids array asignment" y me he dicho
bueno pues hago un "memcpy".

Puedo hacer el memcpy "a huevo"? Lo digo porque he visto por en el gpstart.c cosas como #ifdef USE_GP_MEM que define muchas cosas ..

lo unico que quiero es copiar un array ... estoy por hacer un bucle y asignar elemento a elemento.

Aiken

chui
21/09/2003, 14:19
Las dependencias son:

- libSDl.a : depende de GPSDK.
- libSDL_mixer.a: depdende de libSDL.a
- libSDL_image.a : depende de libSDL.a

Lo del array no se lo que es, postea el codigo fuente a ver si podemos verlo mejor.