Iniciar sesión

Ver la versión completa : Una ayudita para compilar un programa :(



tomo
03/02/2006, 05:34
Necesito la ayuda de algún linuxero hasta la muerte (o no). Dada mi corta experiencia en el cross-compiling, nunca me he topado con una situación así. Kiero compilar el programa MPD desde mi Windows para usarlo en el Linux de GP2X. Lo he intentado a través de msys, pero parece ke se rie de mi diciendome "Must have libao installed!!!". Tengo entendido ke libao es una biblioteca multiplataforma para reproducir sonido en Linux. La he bajado e intentado compilar, pero me da errores al hacer el make (versión diferente de gcc?). He encontrado una libao precompilada para ARM en OpenBSD, ke no creo ke sirva, pero por probar... Y nada, lo mismo. Desactivando la comprobación de libao en el configure de MPD, llega más lejos, hasta ke no encuentra algunos headers (ni yo los encuentro en internet). Igualmente, sin libao, MPD no sirve de mucho.
En fin, ke seguro ke es todo mucho más fácil si se compila desde Linux... Y si alguien ke ya tenga el entorno de compilación para GP2X es tan amable de pasármelo ya compilado estáticamente y todo... se lo agradecería de por vida >_<

http://www.musicpd.org/files.shtml

MPD es una parte esencial del proyecto ke tengo entre manos... :(

neglox
03/02/2006, 05:51
Quizas haya alguna alternativa para gp2x, que es mas o menos lo que quieres hacer?

tomo
03/02/2006, 05:56
Un reproductor de música. MPD es ideal porke con él, el cliente (mi programa) no tendría ke estar ejecutándose en 2º plano consumiendo su ram, mientras escuchas música. Ke yo sepa no hay ningun otro programa como MPD.

pakoito
03/02/2006, 06:03
Un reproductor de música. MPD es ideal porke con él, el cliente (mi programa) no tendría ke estar ejecutándose en 2º plano consumiendo su ram, mientras escuchas música. Ke yo sepa no hay ningun otro programa como MPD.

Pide que te lo compile un linuxero. O instala linux y DIY ^^

neglox
03/02/2006, 06:08
madplay quizas? Un reproductor por linea de comandos? se puede hacer un gui que lo controle.

tomo
03/02/2006, 06:19
Madplay sólo reproduce mp3, ke yo sepa. Me interesa sobre todo ogg.

schan
03/02/2006, 06:41
Puedes probar una versión ya compilada para arm, mira en
http://packages.debian.org/unstable/sound/mpd
No estoy seguro de que vaya a funcionar pero, aparte de dependencias, supongo que debería ir.

tomo
03/02/2006, 06:52
Gracias schan. Fue lo primero ke probé, pero es lo ke tú dices, le faltan las dependencias :( Por eso lo prefiero (y lo preferimos todos) estático.

Uncanny
03/02/2006, 06:59
Tomo yo he usado el Music Player Daemon y no se como de util te puede ser, me refiero a que más que nada está creado para que actue como daemon/servicio corriendo todo el tiempo (y la unica forma de que no lo haga es configurarlo en el archivo de configuración y pasarle a mpd el parametro --no-daemon), pero aun instalado luego configurarlo es cosa de andar con permisos de usuarios, darle un puerto para que corra por el (normal, está ideado para ser un servidor de música para una red) eso sin contar que debes crear (y actualizar) constantemente la base de datos de tu música (sobre todo si haces algún cambio en el directorio donde almacenas la música), vamos, que no es que sea muy flexible a priori.

Lo más flexible y parecido a MPD en cuanto a que use pocos recursos es el reproductor que uso yo en Linux el cual se llama MOC (http://moc.daper.net/), funciona por consola, tiene una interfaz hecha con las librerías ncurses, pero se puede poner en modo "server" (pulsando q), tu música (o lista de reproducción) sigue escuchandose y escribiendo otra vez el comando mocp vuelves a la interfaz, aunque también te permite controlarlo sin el GUI en ncurses pasandole parametros (para pasar a otra canción, pausarla o lo que quieras). No solo reproduce MP3, sino Ogg Vorbis, Ogg Vorbis, FLAC, Musepack, Speex, WAVE, AIFF, AU entre otros formatos. No deberías tener problemas para compilarlo siempre que tengas las librerías necesarias.

Vamos, te digo solo mi opinión sobre MPD si quieres intentar que funcione adelante :)

P.D: ¿Has mirado el config.log que se genera al hacer el configure de cada aplicación o librería que quieres compilar antes de hacer el make? ahí puedes ver los errores o lo que que no encuentra, así como las rutas que el ha encontrado para las librerías precompiladas, los archivos de cabeceras y fuentes de estas o alguna herramienta de tu toolchain.

Topochan
03/02/2006, 06:59
pues intento de explicacion 1:

A) al hacer el configure pero en las primeras lineas tienes que indicarle unos parametros con seria CC=/.../arm-gp2x-gcc CXX=/.../arm-gp2x-g++ AR... configure --static --host=arm-linux --..." y las opciones que hagan falta. Con las ogg cuidado pues para reproducirlas en gp2x se necesita parchear para usar tremor.... muy lioso. Mi consejo es que hagas uno con las SDL y que puedas lanzarlo a segundo plano(no se si seria posible).

Saludos

tomo
03/02/2006, 08:06
@Uncanny:
Precisamente por todo lo ke has descrito, MPD me parece el candidato perfecto. Nunca lo he probado, pero esas características me parecen perfectas.
MOC es uno de los programas ke me llamaron la atención durante mi investigación, pero MPD se llevó la medalla de oro. Si no puedo conseguir un MPD trabajando en GP2X, me lo replantearé.
Y sí, he revisado el log, y veo muchas cosas ke no me convencen. Seguro ke hice algo mal. Pero no me apetece aprender cómo funciona todo eso por ahora. MPD es sólo una herramienta en mi proyecto. El cliente ke se comunica con él es en lo ke realmente kiero ocupar mi tiempo.

@Topochan:
Vaya, hay ke estudiar un master para aprender a usar eso a fondo... Yo con configure, make y make install ya tenía bastante :)
Usar directamente SDL para la música fue la idea original, pero lo ke ofrece es demasiado básico como para hacer un reproductor de música. Para empezar, ni sikiera te puede devolver la duración de la canción, ni la información (artista, título...) ni nada. Ya habría ke tirar de bibliotecas específicas para eso...

Nada.. A las malas tendré ke ponerme una live CD de linux o yo ke se.

Uncanny
03/02/2006, 08:36
Lo que te ha dicho Topochan es porque a veces (yo prefiero hacerlo siempre) es mejor "forzar" ciertas variables de entorno, por ejemplo CC para indicar el compilador de C (p.e: arm-linux-gcc), CXX para el de C++ (arm-linux-g++), el enlazador... eso siempre que le indiques también la ruta absoluta al directorio que tiene binarios de estas herramientas (con añadiendo la ruta con el comando export en la variable PATH), también es buena idea especificarle la ruta a las librerías precompiladas para GP2X (con el parametro -Lruta_a_lib) y la ruta a los archivos de cabeceras y fuentes de estas (con el parametro -Iruta_a_includes), si se lo indicas antes del configure entonces tiene las rutas correctas a las herramientas y librerías y no debe haber errores al hacer la compilación, siempre que tengas todas las librerías necesarias e indiques (en el propio configure) los parametros necesarios (como el prefix o donde se va a instalar con make install, o el target que será arm-linux o similar, ya que vas a compilar y generar un ejecutable para la arquitectura de la GP2X que es ARM).

En realidad es más dificil de decir que de hacer :)

tomo
04/02/2006, 21:02
Weno weno weno.. Al final me he animado y me he puesto a trastear como loco. Pero llego a un punto en ke no entiendo ké está fallando. Diciéndole explícitamente dónde están las libs y headers ke debe usar, termina el configure satisfactoriamente. Hasta akí bien. Después compilando con make llega a un punto en ke me da unos warnings y un error, tal ke así:

/bin/sh ../libtool --mode=link arm-linux-gcc -L/d/prg/devkitPro/devkitGP2X/lib -L/d/prg/devkitPro/devkitGP2X/lib -o mpd mpd-aac_plugin.o mpd-audiofile_plugin.o mpd-flac_plugin.o mpd-mod_plugin.o mpd-mp3_plugin.o mpd-mp4_plugin.o mpd-ogg_plugin.o mpd-audio.o mpd-buffer2array.o mpd-charConv.o mpd-command.o mpd-conf.o mpd-decode.o mpd-directory.o mpd-inputPlugin.o mpd-inputStream.o mpd-inputStream_file.o mpd-inputStream_http.o mpd-interface.o mpd-list.o mpd-listen.o mpd-log.o mpd-ls.o mpd-main.o mpd-metadataChunk.o mpd-myfprintf.o mpd-outputBuffer.o mpd-path.o mpd-pcm_utils.o mpd-permission.o mpd-player.o mpd-playerData.o mpd-playlist.o mpd-replayGain.o mpd-sig_handlers.o mpd-signal_check.o mpd-song.o mpd-stats.o mpd-tables.o mpd-tag.o mpd-utils.o mpd-volume.o mpd-utf8.o -lnsl -lm -lao -ldl -L/d/prg/devkitPro/devkitGP2X/lib -logg -L/d/prg/devkitPro/devkitGP2X/lib -lvorbis -lm -lvorbisfile -L/opt/local/gp2x/lib -lmikmod -ldl -pthread libid3tag/libid3tag.la libmad/libmad.la
libtool: link: warning: library `/d/prg/devkitPro/devkitGP2X/lib/libogg.la' was moved.
libtool: link: warning: library `/d/prg/devkitPro/devkitGP2X/lib/libvorbis.la' was moved.
libtool: link: warning: library `/d/prg/devkitPro/devkitGP2X/lib/libvorbisfile.la' was moved.
libtool: link: warning: library `/d/prg/devkitPro/devkitGP2X/lib/libmikmod.la' was moved.
libtool: link: warning: library `/d/prg/devkitPro/devkitGP2X/lib/libogg.la' was moved.
libtool: link: warning: library `/d/prg/devkitPro/devkitGP2X/lib/libvorbis.la' was moved.
libtool: link: warning: library `/d/prg/devkitPro/devkitGP2X/lib/libvorbisfile.la' was moved.
libtool: link: cannot find the library `/opt/local/gp2x/lib/libvorbis.la'
make[3]: *** [mpd] Error 1
make[3]: Leaving directory `/d/prg/proy/MusicPD/mpd-0.11.5/src'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/d/prg/proy/MusicPD/mpd-0.11.5/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/d/prg/proy/MusicPD/mpd-0.11.5'
make: *** [all] Error 2

Evidentemente, esos .la siguen ahi. No los he movido. Y la ruta '/opt/local/gp2x/lib' no se de dónde la saca. He editado en makefile y la he cambiado por la ke es (supongo) correcta: '/d/prg/devkitPro/devkitGP2X/lib', pero sigue dandome exactamente el mismo resultado.
Por ké debe ser? Estoy editando el archivo incorrecto?

Uncanny
04/02/2006, 21:38
¿Has usado librerías precompiladas en tu toolchain como las de OGG y Vorbis? Porque los errores tienen toda la pinta de ser cosa de la ruta de librerías (un ejemplo es ese /opt/local/gp2x/lib que no sabes de donde sale) que escribe libtool en los archivos de extensión .la (son simples archivos de texto que indican la ruta de ciertas librerías) que deberías encontrar donde almacenas las librerías precompiladas el cual es el subdirectorio /lib dentro de tu toolchain, que parece que en tu caso /d/prg/devkitPro/devkitGP2X/lib/ es la ruta absoluta a este.

Por ejemplo edita el en el archivo /d/prg/devkitPro/devkitGP2X/lib/libogg.la y mira si la ruta que indica a las librerías es en realidad /opt/local/gp2x/lib y de ser así, edita ese archivo y cambia esa ruta por la correcta en tu sistema que es /d/prg/devkitPro/devkitGP2X/lib/ así deberían solucionarse esos problemas.

EDITO:

Como es lógico te he puesto un ejemplo con libogg.la, pero tendrás que revisar, editar y cambiar todos los archivos .la que tengan rutas erroneas y poner las correctas para tu sistema.

tomo
05/02/2006, 02:38
:) efectivamente, en esos .la está la ruta inválida. Mañana probaré a recompilar con eso corregido, ke ahora no tengo tiempo. Gracias!

tomo
28/02/2006, 05:16
Hola.
Despues de un tiempo (preferí dejarlo temporalmente de lado antes de desesperar) he vuelto con mi intento de compilar mpd estáticamente para GP2X...
Hice lo ke me dijiste, Uncanny. Los .la están bien AFAIK. El make entonces llega a un punto en ke no puede enlazar:

arm-linux-gcc -o mpd mpd-aac_plugin.o mpd-audiofile_plugin.o mpd-flac_plugin.o mpd-mod_plugin.o mpd-mp3_plugin.o mpd-mp4_plugin.o mpd-ogg_plugin.o mpd-audio.o mpd-buffer2array.o mpd-charConv.o mpd-command.o mpd-conf.o mpd-decode.o mpd-directory.o mpd-inputPlugin.o mpd-inputStream.o mpd-inputStream_file.o mpd-inputStream_http.o mpd-interface.o mpd-list.o mpd-listen.o mpd-log.o mpd-ls.o mpd-main.o mpd-metadataChunk.o mpd-myfprintf.o mpd-outputBuffer.o mpd-path.o mpd-pcm_utils.o mpd-permission.o mpd-player.o mpd-playerData.o mpd-playlist.o mpd-replayGain.o mpd-sig_handlers.o mpd-signal_check.o mpd-song.o mpd-stats.o mpd-tables.o mpd-tag.o mpd-utils.o mpd-volume.o mpd-utf8.o -L/d/prg/devkitPro/devkitGP2X/lib -lnsl -lao -L/d/devkitPro/devkitGP2X/lib /d/prg/devkitPro/devkitGP2X/lib/libvorbisfile.a /d/prg/devkitPro/devkitGP2X/lib/libvorbis.a /d/prg/devkitPro/devkitGP2X/lib/libogg.a -lm -L/home/brendan/tmp/open2x_test/usr//lib /d/prg/devkitPro/devkitGP2X/lib/libmikmod.so -ldl -pthread libid3tag/.libs/libid3tag.a -lz libmad/.libs/libmad.a -Wl,--rpath -Wl,/d/prg/devkitPro/devkitGP2X/lib -Wl,--rpath -Wl,/d/prg/devkitPro/devkitGP2X/lib

d:\prg\devkitpro\devkitgp2x\bin\..\lib\gcc\arm-linux\4.0.2\..\..\..\..\arm-linux\bin\ld.exe: cannot find /usr/lib/ inside d:\prg\devkitpro\devkitgp2x\arm-linux\bin\../../sysroot
Y ahí muere. La ruta a la ke se refiere sí ke existe en mi PC...
Gracias de antemano.

tomo
07/03/2006, 20:04
Lo he conseguido compilar desde un Linux de la uni... Ahora me keda probarlo en la consola. Ya veremos.