FFmpegをlibfdkaacで単一の静的バイナリにコンパイルする方法は?[閉まっている]


9

私の目標は、OSXとLinuxのlibfdkaacとx264をサポートする単一の静的FFmpegバイナリを構築することです。まず、OSXでビルドしようとしました。FFmpegWebの指示に従います:https : //trac.ffmpeg.org/wiki/CompilationGuide/MacOSX

以下は、静的バイナリを構築するために適用した構成設定です。

./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

ビルド後のFFmpegは約14Mbです。これは、サードパーティのライブラリが含まれていないことを意味します。実際、にある動的ライブラリにリンクする必要があり/usr/local/libます。これらの動的ライブラリを削除すると、FFmpegに次のようなエラーが表示されます。

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

すべての外部ライブラリを単一の静的バイナリにするのは正しい方法ですか?

よろしくお願いします!


1
ようやくわかりました。動的ライブラリがまだリンクされている理由は、ffmepgビルドプロセスが動的ライブラリを使用するために優先度が高いためです。実際、プレフィックスフォルダーに動的ライブラリと静的ライブラリの両方をビルドし、プレフィックスフォルダーからすべての* .dylibファイルを削除すると、ビルドプロセスで静的ライブラリが取得され、単一のバイナリが正常にビルドされました。
Ellis Shen、

同じ問題を抱えている他の人のために、あなた自身の質問に答えることを検討してください。
stib '29年

OS Xには、lddバイナリの動的ライブラリの依存関係を表示するコマンドはありませんか?またはfile、バイナリが静的にリンクされたか動的にリンクされたかを含む出力を持つコマンドだけですか?
Peter Cordes 2015

また、--disable-shared --enable-static静的なバイナリを作成する必要があります。Linuxで、またはWindows用にクロスコンパイルするときに、そうなると思います。OS Xのffmpegビルドスクリプトのバグのように聞こえる
Peter Cordes

おっと、自分のFFmpeg(GNU / Linux上)を更新していただけで、--enable-static静的なバイナリは作成しません。これは、libav*ffmpegによってビルドされた(およびバイナリによって使用される)ライブラリを静的にするかどうかを指定します。ffmpegに外部ライブラリの静的バージョンを使用させません。したがって、表示されているのはffmpegの標準的な動作です。
Peter Cordes 2015

回答:


4

CentOS 5.11とFFmpeg 3.0では、オプションを使用する必要があります

--pkg-config-flags="--static"
--extra-cflags="-I$HOME/ffmpeg/include -static"
--extra-ldflags="-L$HOME/ffmpeg/lib -static"

--enable-staticコンパイラに「静的ライブラリ」(libav * .a)を作成するように指示します。他のスタンドアロン(静的)アプリケーションでFFmpeg APIを組み合わせることができます。

--disable-sharedは、「動的にリンクされた共有オブジェクトライブラリ」(libav * .so)を作成しないようコンパイラーに指示します。これらのタイプのライブラリは、他のアプリケーションでロードしてFFmpeg APIを使用できます。

これらの2つのオプションは、FFmpegをスタンドアロンの静的実行可能ファイルとしてコンパイルしません。


9

stibの提案に感謝します。ここに答えを残します。

FFmepgビルドプロセスは、静的ライブラリの準備ができていても、動的ライブラリを使用する方が優先されます。したがって、最初にビルド構成から一部の外部ライブラリサポートを削除し、すべての外部ライブラリが静的のみであることを確認します(* .dylibをプレフィックス/ usr / local / libから削除します)。次に、次のコマンドで再構築します。

./configure --pkg-config-flags="--static" --libdir=/usr/local/lib --extra-version=ntd_20150128 --disable-shared --enable-static --enable-gpl --enable-pthreads --enable-nonfree  --enable-libass --enable-libfdk-aac  --enable-libmp3lame  --enable-libx264 --enable-filters --enable-runtime-cpudetect

--pkg-config-flags="--static"ビルドを静的ライブラリを使用するように要求することを忘れないでください。次に、単一の実行可能なFFmpegバイナリを取得します!

PS:libassは、動的ライブラリーしか使用できないFontconfig libに依存しているため、構成からlibassサポートを削除しました。fontconfigの静的ライブラリの作成方法がわかったら、libassサポートを元に戻します。

ありがとう。


したがって、「-enable-static」は必要ありませんか?!
Dr.jacky、

3
私は--enable-staticが依然として必要だと思います
Ellis Shen

1
ああ、あなたは私の命を救った、私はこの問題にほぼ2週間取り組んでおり、解決策のためにWebをクロールした。そして、これです。ありがとうございました !
YoannM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.