“Metodología compilacional” o ejemplo de compilación de un programa (mplayer)

Siguiendo con el espiritu del artículo anterior os voy a poner un ejemplo de como compilar un programa, concretamente mplayer.

Esta no es una guia para compilar mplayer, es tan solo una muestra de como se compilan las cosas, y el método a usar.

Despues de bajar y descomprimir las fuentes (MPlayer-0.91.tar.bz2)…

bzip2 -d MPlayer-0.91.tar.bz2
tar -xf MPlayer-0.91.tar

En el directorio /usr/src, pero podría ser en cualquier otro, /home/davidcg/src, /usr/local/src suelen ser los más lógicos (src viene de sources) pero podría ser cualquier otro inventado.

vale, a hora os vais dentro del directorio y empezamos.

Lo primero es hacer ./configure –help para echar una ojeada a las opciones. No importa que no entendais mucho, no es necesario.

Por lo pronto lo primero que llama la atención son las opciones –language=es y –enable-gui

Lo primero supongo que será para mostrar los mensajes en castellano, de todas maneras pide a gritos que lo incluyamos y no creo que haga daño a nadie. –enable-gui sirve para activar la interficie gráfica. Yo depués de mucho usarlo he descubierto que aunque muy mona (incluso tiene skins diferentes) no suelo usarla muy a menudo. Así que he decidido no usarla.

de manera que haré…

./configure –language=es

Y solo tendré el mplayer funcionando desde la linea de comandos y no habrá interficie gráfica puesto que no he seleccionado –enable-gui

Bien, ahora tenemos que fijarnos en la larga lista que nos muestra el configure. La mayoría son cosas muy raras, pero la primera que me llama la atención es esta.

Checking for SDL … no

Bien, yo que he usado mplayer otras veces se que necesito SDL. Esto son unas librerias, rutinas y facilidades para el programador que sirven para programar juegos. Manejo de gráficos, sonido etc, una especie de DirectX libres que tienen bastante renombre y están orientadas a los juegos.

Lo necesito porque mplayer puede visualizar peliculas con diversos “drivers” de pantalla. El que suele venir es x11, que sirve para ver pelis en las X (entorno gráfico base de los unixes), pero yo se que el x11 al poner a pantalla completa, no se pone con mi tarjeta gráfica mientras que sdl si. Lo se porque lo he probado. Se pueden tener varios “drivers” y usar el que uno quiera.

Pero esto es cuento de mplayer y no viene al caso.

La cuestión es que quiero mi SDL!!!

bueno, como tengo debian voy a buscar un poco.

apt-cache search sdl

me sale una lista

Ojeando la que me parece más probable que necesite es el paquete libsdl1.2debian, ¿suena probable no?, parece el paquete básico por el nombre. Es el que da mejores vibraciones de todos.

probemos, apt-get install libsdl1.2debian

volvemos a hacer ./configure –language=es y observamos la salida.

Checking for SDL … no

Pos no erea ese 🙂

Bien, esto es debido a que he cometido un error, porque cuando la salida de configure te dice no, suele ser debido a que te falta un paquete devel, esto significa que si falta sdl no se refiere a sdl , sinó al código de sdl.

Así que apt-get remove –purge libsdl1.2debian para quitarlo. Si luego vemos que lo necesitamos también ya lo pondremos.

vuelvo a buscar, apt-cache search sdl

Y observo que hay un paquete llamado libsdl1.2-dev

¿Será esto? apt-get install libsdl1.2-dev

./configure –language=es

miramos la salida…

Checking for SDL … yes (using sdl-config)

Ya tenemos SDL 🙂

Fijaos que el tener SDL o no es opcional, pero en otros casos faltará algo que no es que lo queramos o no, sinó que lo necesitais por cojones porque sinó el make os dará error. La forma de actuar es la misma.

Sigamos mirando la salida.

Lo siguiente que me llama la atención es…

Checking for OggVorbis support … no

Yo se que es necesario para reproducir audio ogg, y por lo tanto videos en OGM. Lo sé porque un día fui a reproducir un fichero OGM y me dijo que nanai, miré en google y vi que OGM estaba relacionado con ogg, hice el configure y observe que lo único ogg que salia era el Checking for OggVorbis support … no, así que era obvio que lo necesitaba.

Así que vamos a por ogg

apt-cache search ogg

Uff que largo , menuda lista, antes de mirar todo eso probaré con otra cosa

apt-cache search libogg

antes era libsdl, así que probemos con libogg, siempre estamos a tiempo de mirar la lista entera que sale con solo ogg 🙂

python-pyogg – A Python interface to the Ogg library
libogg-dev – Ogg Bitstream Library Development
libogg0 – Ogg Bitstream Library

Bueno, esto está mucho mejor

vamos a instalar libogg-dev

Volvemos a hacer el configure y miramos la salida.

Checking for OggVorbis support … yes

Ya tenemos ogg 🙂

Supongamos que no hubiera funcionado. Podriamos haber probado con libvorbis-dev por ejemplo, ya que vorbis es quien desarrolla ogg

Y sinó a probar otras

Checking for DivX4linux/DivX5linux/OpenDivX decore … no

Uff que mal rollo, ¿no podré ver divx?

Podeis instalar los codecs de divx de divx.com, y al hacer configure os marcara un yes y solucionado.

Pero yo tengo por aquí suelto un source llamado xvid, que según su web es un proyecto libre para reproducir MPEG-4 (divx)

así que como no lo tengo en las distribución de debian me toca compilarlo.

descomprimimos, y hacemos un configure, y observo (recordar que estamos compilando el xvid y que el mplayer lo hemos dejado estancado)

cheking for nasm… no
configure: WARNING: nasm not found -Compiling generic sources only

Yo se que nasm es el ensamblador libre que se usa en linux y ensamblador me suena a rapidez, así que vamos a ponerle nasm

apt-get install nasm

checking for nasm … yes
checking for nasm patch version 28
configure: WARNING: nasm patch versino too old – Compiling generic

La madre que lo parió, ¿Pues no me está diciendo que mi nasm es mu viejo?, llamar viejo a un paquete de mi debian woody , será posible.

Total, que como dice que compila con no se que generico en vez de con nasm, dejemoslo y no nos calentemos la cabeza.

make, make install (como root) y instalado xvid

Volvamos a mplayer, configure, y me cago en to lo que se menea…

Checking for DivX4 compatibility in XviD … no
Checking for DivX4linux/DivX5linux/OpenDivX decore … no

Me sale antes xvid…yes, pero las lineas de divx me siguen diciendo no, ¿Significa eso que no podré divx? ¿usará xvid en substitución?

Como soy más xulo que nadie decido instalar el OpenDivX ese que sale en la linea, yo todo lo que sea Open me atrae.

Me bago libdivxdecore-0.4.7.tgz de la página de www.opendivx.org, observo que también es un proyecto libre para reproducir MPEG-4

Descomprimo, le hago configure, make, make install, así directo y ya está

Vuelvo al mplayer y ….

Checking for DivX4 compatibility in XviD … no
Checking for DivX4linux/DivX5linux/OpenDivX decore … no

Jesucristo en monopatin

Ya me está poniendo de mala leche. Sin embargo al mirar más abajo , al final del todo el configure te dice que “driver” de video , “drivers” de sonido,y codecs hay disponible con todo lo que le has metido.

Codecs: qtx opendivx libdv real xanim dshow/dmo win32 libmad liblzo gif

Pero si ya aparece opendivx!!!! ¿salia antes? ¿Ha sido por instalar opendivx?, lo digo porque aparece un win32 y yo no he instalado nada de win32 por ningún lado.

Es lo mismo

Fijemonosno en esa información que nos da el configure de mplayer, parece bastante util. Tal y como está ahora sale esto…

Optimizing for: i686 mmx mmx2 sse mtrr

Enabled optional drivers:
Input: streaming edl tv mpdvdkit2 vcd

(parece que podré ver vcd y ver la tele aunque yo no se lo he dicho)

Codecs: xvid libavcodec libvorbis

(valee, ya tengo los codecs xvid y libvorbis)

Audio output: oss sdl mpegpes(file)

(esto me interesa, el sonido en sdl, y parece que con oss tambien funcionará)

Video output: xvidix sdl vesa mpegpes(file) fbdev dga xv x11

(cucha, será que el xvid no era un codec sino un driver de video?, en todo caso aparece nuestro sdl, y x11 por defecto. Los otros no se si funcionaran, cuando vayais a probar un video es cuestión de probar el que os vaya bien, idem con audio)

Disabled optional drivers:

(y todo esto es lo que no tenemos)

Input: tv-v4l tv-bsdbt848 cdda dvdnav dvdread dvdcss smb
Codecs: qtx opendivx libdv real xanim dshow/dmo win32 libmad liblzo gif

(no tenemos el codec opendivx? ni el real? pero si antes me decia que si!)

Audio output: sgi sun alsa esd arts dxr2 nas win32
Video output: bl zr dxr3 dxr2 directx gif89a jpeg png svga aa ggi xmga mga opengl directfb tdfxfb 3dfx

En fin, que le vamos a hacer

Hacemos un make, no da error

Hacemos un make install como administrador.

Y provamos a reproducir una peli de las últimas que tenga. Digamos Matrix 2, atención, es un suponer , yo no tengo Matrix 2, lo digo por si alguien de la RIIA (se escribe así??) está leyendo y se piensa cosas raras. 🙂

mplayer matrix2.avi

Funciona!!!!! y con los “drivers” de video y audio por defecto.

Sinó funcionara el sonido o el video…

mplayer -vo help muestra todos los de video disponibles y mplayer -ao help los de audio. Es lo que salia en el configure.

Si ninguno os funciona, es cuestión de volver al configure y conseguir añadir los otros, por ejemplo el opengl neceitareis buscar algo relacionado con opengl y dev por ejemplo

¿Veis?

En realidad no hace falta tener ni zorra idea de lo que estais haciendo :-), es como un juego, prueba y error.

Pero no os asusteis. Yo solo os he puesto un ejemplo práctico.

Resulta que si hubierais hecho directamente…

./configure
make
make install

hubierais tenido ya el mplayer funcionando sin tanto rollo :-), es cuando haceis make que os dais cuenta que os falta algo necesario para la compilación…

Y es cuando probais mplayer con una peli cuando os dais cuenta que necesitais algo más, ya sea la interficie gráfica, ya sea algun driver de audio o sonido. Entonces debeis volver a compilar y mirar el configure siguiendo este caotico metodo 🙂

Entonces, ¿A que viene el tio este (yo) con tanto rollo?, pues para que veais como teneis que hacer las cosas cuando al compilar falta algo o necesitais alguna opcion especial.

Así que ya sabeis, configure, make y si todo va bien make install, y luego ya vereis si funciona o no y os calentareis la cabeza.

Así que no os asusteis, mirar el xvid y el libdixdecore, siguiendo los 3 pasos directamente se compilaban, al igual que el mplayer.

Y tendriais que verme compilando el núcleo, cuando empiezo a quitar cosas intuitivamente para podarlo y dejarlo más pequeño. :-), aunque el kernel no te suele dar error al compilar, te lo da al arrancar con el.

Autor: davidcg

This entry was posted in Linux. Bookmark the permalink.

3 Responses to “Metodología compilacional” o ejemplo de compilación de un programa (mplayer)

  1. marble says:

    Yo ya no se que decir xD Es impresionante tu trabajo, enhorabuena por el articulo, muy ilustrativo 🙂

  2. jBilbo says:

    Eres el afortunado que ha hecho la aportación numero 100 a gplurv! xDD. Te iba a felicitar en el anterior artículo (una currada, realmente genial), pero antes de que me diera tiempo me he encontrado con este xD, así que te digo lo mismo, otro genial articulo… y para redondearlo es el numero 100 🙂

    ¿Quien hizo la primera aportación a gplurv?

    Aquí teneis la respuesta 😉

  3. proclamo says:

    Ojalá hubiera encontrado algo parecido a este artículo cuando empecé con linux!!!! Me hubiese ahorrado muchos dolores de cabeza… pero bueno, esa es la guinda del pastel, no? 😉

    Espero que esto llegue a muchos de los que quieren empezar en este mundillo.

    Por mi parte, se lo recomendaré a todo el mundo, estoy empezando a despertar el gusanillo entre mis compañeros, en primero de etis, a ver si logro viciarlos a la mayoría antes de navidades… por ahora ya van dos!!! jeje 😉

Leave a Reply