トップ 検索 一覧 ヘルプ RSS ログイン

MinGW+ffmpeg(5)pthreadの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!POSIX Threads for Win32(pthread-w32)
pthread-w32はWindows上でPOSIX(簡単に言えばUNIX世界の規格)に準拠した''スレッド機能を実現するライブラリ''だ。
x264のマルチスレッド機能はこのpthreadを通して動作するため、UNIXやLinux上なら単純にビルド可能だが、Windows上ではpthread-w32を使用することになる。

バイナリでも配布されているが、ここではソースからビルドする。
他のライブラリ等と異なり、bootstrapやconfigureはない。いきなりmakeだ。
 $ make clean GC
 $ cp pthread.h /mingw/include/
 $ cp sched.h /mingw/include/
 $ cp libpthreadGC2.a /mingw/lib/

pthreadを使うアプリケーションの動作時には''pthreadGC2.dll''が必要になる。
つまり、本特集では最終的に出来上がるffmpeg.exeと同じディレクトリに置こう。

staticライブラリ版(DLL不要)ではない理由は以下を参照。

!!staticライブラリ版に関して
筆者は苦渋の決断でDLL版を選択したが、static版が提供されていないわけではない。
pthread-w32はコンパイラと目的により多種多様なバイナリを生み出すが、その選択はmakeで行う。
READMEのごく一部を抜粋&和訳してみる。
""make clean GC        (GNU-CのCクリーンアップコード付きDLLのビルド)
""make clean GCE       (GNU-CのC++例外処理付きDLLのビルド)
""make clean GC-static (GNU-CのCクリーンアップコード付きインライン化staticライブラリのビルド)

本特集の本来の目的からは当然GC-staticが選択されるべきであるが、上記では''GC''を選択した。
結果として、pthread-w32のDLLが実行時に必要になるが、これは最終的にffmpegのビルドに''コード修正をなくし''、その動作に'''不安要因をなくすため'''だ。

GC-staticを選択する場合には、ffmpegのソースを幾分修正し、様々な注意点をクリアしなければならない。
筆者は試行錯誤と迷走の結果、pthread-w32だけはDLL版を選択することにした。
おそらくpthread-w32の扱い方で困っている人は他にも沢山いるだろう…。

詳細は[[MinGW+ffmpeg(A)pthreadは複雑]]を参照。staticライブラリ版の作成方法は書いてませんが、やってみたい方に必要な基礎知識は得られるかも。
詳細は[[MinGW+ffmpeg(A)pthreadは複雑]]を参照。staticライブラリ版の作成方法は書いていないが、やってみたい方に必要な基礎知識は得られるかも。