Mi objetivo es construir un solo binario FFmpeg estático con libfdkaac y soporte x264 para OSX y Linux. Primero, intenté construir uno en OSX, sigo las instrucciones en la web de FFmpeg: https://trac.ffmpeg.org/wiki/CompilationGuide/MacOSX
Aquí están los ajustes de configuración que apliqué para construir un binario estático:
./configure pkg_config='pkg-config --static' --prefix=/usr/local --extra-version=ntd_20150126 --disable-shared --enable-static --enable-gpl --enable-pthreads --enable-nonfree --enable-fontconfig --enable-libfreetype --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-filters --enable-runtime-cpudetect
Después del proceso de compilación, FFmpeg es de alrededor de 14Mb, lo que significa que no incluye las bibliotecas de terceros. De hecho, requiere un enlace a bibliotecas dinámicas ubicadas en /usr/local/lib
. Si eliminé esas bibliotecas dinámicas, el FFmpeg mostrará un error como:
dyld: Library not loaded: /usr/local/lib/libSDL-1.2.0.dylib
Referenced from: /usr/local/bin/ffmpeg
Reason: image not found
Trace/BPT trap: 5
¿Es la forma correcta de convertir todas las bibliotecas externas en un solo binario estático?
¡Realmente agradecería su ayuda!
ldd
comando para mostrar las dependencias de la biblioteca dinámica de un binario? ¿O simplemente un file
comando con salida que incluye si un binario estaba vinculado estática o dinámicamente?
--disable-shared --enable-static
debería hacer un binario estático. Creo que lo hace en Linux, o cuando se realiza una compilación cruzada para Windows. Entonces suena como un error en los scripts de compilación de ffmpeg en OS X
--enable-static
no crea binarios estáticos. Hace que las libav*
bibliotecas creadas por ffmpeg (y utilizadas por los binarios) sean estáticas o no. No hace que ffmpeg use versiones estáticas de bibliotecas externas. Entonces, lo que está viendo es el comportamiento estándar de ffmpeg.