Meu objetivo é criar um único binário FFmpeg estático com suporte a libfdkaac e x264 para OSX e Linux. Primeiro, tentei criar um no OSX, sigo as instruções na web do FFmpeg: https://trac.ffmpeg.org/wiki/CompilationGuide/MacOSX
Aqui estão as definições de configuração que apliquei para criar um binário 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
Após o processo de compilação, o FFmpeg fica em torno de 14Mb, o que significa que não inclui as bibliotecas de terceiros. De fato, ele requer um link para bibliotecas dinâmicas localizadas em /usr/local/lib
. Se eu removi essas bibliotecas dinâmicas, o FFmpeg mostrará um erro 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
É o caminho certo para transformar todas as bibliotecas externas em um único binário estático?
Eu ficaria muito grato por sua ajuda!
ldd
comando para mostrar as dependências da biblioteca dinâmica de um binário? Ou apenas um file
comando com saída que inclui se um binário estava vinculado estaticamente ou dinamicamente?
--disable-shared --enable-static
deve criar um binário estático. Eu acho que faz no Linux, ou quando a compilação cruzada para o Windows. Então parece que um bug nos scripts ffmpeg construir sobre OS X
--enable-static
não faz binários estáticos. Isso torna as libav*
bibliotecas criadas pelo ffmpeg (e usadas pelos binários) estáticas ou não. Não faz o ffmpeg usar versões estáticas de bibliotecas externas. Então, o que você está vendo é o comportamento padrão do ffmpeg.