トップ 検索 一覧 差分 ソース ヘルプ 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ライブラリ版の作成方法は書いていないが、やってみたい方に必要な基礎知識は得られるかも。

最終更新時間:2008年04月10日 01時39分10秒