ffmpeg/libav系ライブラリのデバッグ環境の作り方(Mac OS X)
まずは!
こんにちは,ffmpeg/libavツールの使用歴が長い(10年ぐらい?)なおうちです.
映像系の仕事,研究や趣味を持っている方にとって,一番身近で,安価(フリー)で有能なツールがffmpeg/libav系ツールではないでしょうか?
もっとマニアックな人(符号化系,復号系の関係者?)は実際のモジュールを利用したり,ソースコード自体を参考にしたり,ソースコードを改修してさらに使いやすしたり,,,することあると思います.
しかし!!
そのソースコードは,膨大!
中々目当てのモジュール等を見つけられません.XCodeやVisualStudioのIDEプロジェクトがあれば,,ブレイクポイントを付けながらステップ実行できるのに,,,と考えたことありませんか?
一応あります!
https://github.com/Akagi201/ffmpeg-xcode
とか?
でも特定のバイナリ,ライブラリバージョンのプロジェクトは中々見つからない!
そこで,僕が行っている方法を紹介します.ただしXCodeでです.要領を得ればVisualStudio等でもできると思います.
インストール
環境:Mac OS X 10.10.5, 対象libav 12.1(201706月時点,最新版ですね)
(今回はlibavライブラリを使用しているavconvを対象にします)
1.まず普通にインストール
1.1 ソースコード download
1.2 解凍,環境変数の設定(他リンクするライブラリが該当ディレクトリにある場合)
naouchi$ export PKG_CONFIG_PATH=/opt/libav12.1/lib/pkgconfig
naouchi$ export LD_LIBRARY_PATH=/opt/libav12.1/lib
naouchi$ export DYLD_LIBRARY_PATH=/opt/libav12.1/lib
1.3 シンプルなconfigure
naouchi$ ./configure --prefix=/opt/libav12.1 --enable-shared --enable-gpl --enable-pthreads --enable-avresample --enable-swscale --arch=x86_64
1.4 make && sudo make install
zlib系やnasm系が無い等のエラーが出たら素直にインストールしましょう.
XCode projectの作成
OSXのバージョンが低めであるため,XCodeのバージョン(v7.2.1)も低めです.
File -> New -> Project.. → MAC OS X Application タブのCommand Line Tool → Next → ProductName入力(適当) → Next → プロジェクトディレクトリ選択(適当)
初期画面は以下になります.
次にmain.cを削除しちゃいましょう!Move To Trashへ!
その後main関数があるlibav12.1/avconv.cをプロジェクトへ挿入します.
次にライブラリパスとヘッダパスを指定します.
プロジェクトのビルドセッティング → Header Search Path と Library Search Path
本ページでは,Header Search Path=”/opt/libav12.1/include”, Library Search Path=”/opt/libav12.1/lib”として設定致しました.
先にインストールしたライブラリをプロジェクトに取り込みましょう.
naouchi$ open /opt/libav12.1/lib
としてインストールディレクトリを開き,プロジェクトへドラッグ&ドロップ!
トライ&エラー
では最低限の準備は終えました.ビルドしてみましょう.
早速エラーが出てますね.あとはトライ&エラーを続けていくだけです.そうです,面倒です.あまり賢い方法ではないですね.でもMakefileやconfigファイルを読み解くよりずっと早いと思います....
1. config.hがない
コンソール上でlibav12.1をビルドしたディレクトリに移動して,config.hを探しましょう.
naouchi$ find ./ -name config.h
出力されたディレクトリのパスを先程のHeader Search Pathに含めます.そうすることで,config.hのエラーは解消されるはずです.そして再ビルド....エラーが増えましたね.
2. undefined symbol audio_sync_method, undefined symbol …, undefined symbol …の解消
一番最初にインストールしたlibav12.1のライブラリ群に上記の変数が定義されていないため,このようなエラーが発生致します.これらのエラーを解消するために,定義しているファイルをプロジェクトに読み込んでしまいます.
まず,何処に定義されているか
naouchi$ grep -r audio_sync_method ./
どうやらavconv_opt.cというファイルで定義されているようです.
これをプロジェクトに挿入します.そしてビルド.エラーがまた出ました.
同様にして,undefined symbolのパラメータ変数,関数名をgrepして定義されているファイルを探し,プロジェクトに挿入していきます.最終的にエラーがでなくなるまで,これを続けます.結局以下のファイルをプロジェクトに挿入したところで,エラーが無くなりました.
avconv_opt.c avconv_filter.c avconv_vda.c cmdutils.c
ビルド成功です.
これでavconvに対してブレイクポイントを配置しステップ実行できるようになりました.
ただし,正常にステップ実行出来るのは,プロジェクトに挿入したソース・ファイルの部分のみになります.ステップ実行を行うためには,ソースコードを挿入する必要があるのです.
よって,自分がステップ実行したいソースコードがある場合は,それをプロジェクトに挿入し,トライ&エラーを続けていれば,いずれビルドが成功するでしょう.
以上の方法はなにもffmpeg/libav系のライブラリや実行バイナリだけに当てはまるものではありませんので,役に立つこともあると思います.
以上.