2012-03-08 19 views
5

Estoy compilando FFmpeg desde la fuente.

./configure --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-x11grab --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 
make 
make install 

ldd /usr/local/bin/ffmpeg me dio esta

linux-gate.so.1 => (0xb7717000) 
libavdevice.so.53 => not found 
libavfilter.so.2 => not found 
libavformat.so.54 => not found 
libavcodec.so.54 => not found 
libpostproc.so.52 => not found 
libswresample.so.0 => not found 
libswscale.so.2 => not found 
libavutil.so.51 => not found 
libm.so.6 => /lib/i386-linux-gnu/tls/i686/nosegneg/libm.so.6 (0xb76e3000) 
libpthread.so.0 => /lib/i386-linux-gnu/tls/i686/nosegneg/libpthread.so.0 (0xb76ca000) 
libc.so.6 => /lib/i386-linux-gnu/tls/i686/nosegneg/libc.so.6 (0xb7569000) 
/lib/ld-linux.so.2 (0xb7718000) 

Configuración $LD_LIBRARY_PATH a /usr/local/lib corregir los errores "not found", pero por las razones mencionadas here, no quiero establecer $LD_LIBRARY_PATH permanantly.

Recompulsé con los mismos comandos, esta vez con $LD_RUN_PATH establecido en /usr/local/lib.
make parecen haber ignorado $LD_RUN_PATH al compilar.

¿Hay alguna manera de usar $LD_RUN_PATH sin realizar cambios extensos en el archivo Makefile?

+0

¿se puede vincular con éxito con la mano (es decir, en la línea de comandos, sin usando make)? – Beta

+0

No lo sé. ¿Cómo puedo probar eso? – htoip

+0

¿Podría mostrarnos la parte del archivo MAKE que ejecuta 'ldd/usr/local/bin/ffmpeg'? – Beta

Respuesta

5

¿Tiene alguna razón para compilar el binario en modo compartido (como querer construir un software para vincularlos)? Si un binario estático "ffmpeg" funcionará igual de bien para usted, configúrelo sin la opción --enable-shared para eliminar estas dependencias.

De lo contrario, deberá indicarle a su sistema dónde viven las bibliotecas compartidas, configurando LD_LIBRARY_PATH en el entorno, prefijando las ejecuciones de 'ffmpeg' con LD_LIBRARY_PATH (por ejemplo, "LD_LIBRARY_PATH =/usr/local/lib/usr/local/bin/ffmpeg ") o actualice la ruta de la biblioteca de su sistema con la ubicación correcta.

Hay una solución más en la parte inferior de la página que enlazó en su publicación: "LDFLAGS = '- L/my/strange/path/lib -Wl, -rpath/my/strange/path/lib '". Para FFmpeg, y para su situación, pasar este parámetro extra a la hora de configurar:

--extra-ldflags="-L/usr/local/lib -Wl,-rpath /usr/local/lib" 

Y binario los "ffmpeg que resulten sabrá dónde encontrar las bibliotecas compartidas.

Muchas soluciones a esta.

+0

No sé si necesito la opción compartida, pero eso es lo que usan las instrucciones. El '--extra-ldflags' funcionó perfectamente. – htoip

2

Para cualquier otra persona que se tropiece con esto, la razón por la que $LD_RUN_PATH no funcionó puede deberse a this bug con el vinculador de oro.

(La solución es utilizar rpath como se describe en la respuesta de Mike)

2
  1. Lo más probable es LD_RUN_PATH se ignora porque ./configure del paquete ha realizado ya algunas -Wl, opciones -rpath en línea_de_órdenes del enlazador (francamente, no me conozco. Veo el mismo comportamiento aquí pero estoy compilando de 486 a mips32).

  2. intente ejecutar configure de esta manera: ./configure LDFLAGS = "- L/tu/lib -Wl, -rpath-link =/los/lib" CPPFLAGS = "- I/tu/include" --prefix =/TGT ...

    recomiendo el uso de -rpath-enlace en lugar de -rpath si/el directorio es diferente de/TGT