ffmpegをVS2015 CTPでコンパイルしてみる

公開:2015-03-29 19:29
更新:2017-11-15 21:58
カテゴリ:vs2015,ffmpeg,node.js,windows,audio

Shift MediaプロジェクトのおかげでなんとかffmpegをVS2013でビルドすることができた。

github.com

続いてVS2015 CTP6でビルドしてみることにした。VS2015 CTP用のWindows 10開発ツールがリリースされたのでVS2015環境になんとか持っていきたい。通常新しいVSでソリューションファイルを読み込むと変換して読み込まれるのでなんとかなるはずだ。

しかしVS2013のソリューション・ファイルを開いてビルドするとCランタイム周りでエラーが発生した。今まではCRTのヘッダファイルはVCインストールディレクトリ中のincludeディレクトリに入っていたが、ユニバーサルCRTとなり位置が変わっているためであった。なんとCRTは全面書き換えされていたのだ。ffmpegの一部ソース(正確に言うとShift Media Projectが提供しているパッチコード)でディレクトリを直接参照している部分がありそこがエラーになるのだった。これはソースコードを修正した。

さらにVS2013とビルドしたバイナリの出力ディレクトリを分けるためにプロジェクトファイルをコピーし編集することにした。これは量が多くて手動ではやってられないのでnodeでツールを作って実行することにした。

github.com

Shift Media Projectで提供されているffmpeg関連プロジェクトはSMPフォルダにソリューション・プロジェクトファイルが入っている。このツールはそのフォルダの中身をコピーし、プロジェクトファイルを順に読み込んで出力ディレクトリの設定部分を変更して書き込むということを行う。しかしコマンドラインツールとして仕立てるところでやり方がわからず時間を要した。さらにプロジェクトファイルはutf8のBOM付きなので読み込むのに少しはまってしまった。nodeのfsはBOM付きのutf8ファイルの読み込みには対応していないのだ。この部分はstrp-bomというnpmモジュールで対応することにした。

www.npmjs.com

とりあえずこのツールを使ってプロジェクトファイルを置換し、ビルドしていくことにする。

先ほど気づいたのだが、VS2015で作られる.sln/.vcxprojファイルというのはMSBuildでも使えるのだな。というよりVSがMSBuildのファイルを出力するといったほうが正解なのか。つまりはコマンドラインで.sln/.vcxprojファイルを指定すればビルドできるのであった。

msbuild libiconv.sln /p:Confguration=Release /p:Platform=x64

そうするとnodeでコマンドをspawnすればビルドも自動化できるかなと思った。そこまでやるかどうかはわからないが。