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

公開:2015-04-05 19:02
更新:2017-09-22 05:40
カテゴリ:ffmpeg,vs2015,windows,audio

とりあえずまとめてビルドするツールは完成したので、あとはソリューション/プロジェクト単位で出るエラーを潰していっている。ライブラリ知識はほとんどないので暗中模索といった感じではあるが、徐々にエラーの数は減っている。

今のところよく遭遇するのが標準ライブラリへのパス問題。VS2015から標準ライブラリが書き換えられ、インクルードパスも変更になった。そのため、インクルードパスの位置に依存するような#include部分を新しいパスに置き換えなければならない。このようなソースコードにしばしば遭遇する。これはもともとのコードというよりもShift Media Project側であてられたパッチコードに多い。

次に多かったのがsnprintf。これはC99から標準となったのであるが、それまでは_snprintfという関数名であった。VSは2012までC99に対応してなかったので、Windows対応としてはこれをマクロ定義 #define snprintf _snprinfでしのいでいる。VS2015では標準対応したのでコンパイルすると重複定義エラーが発生する(ようにしている)。C99に対応したのはVS2013からであるが、VS2013ではこのままでコンパイルは通っていたようだ。これはソースコードに点在しているから、パッチをあてなければならない。パッチといっても下記のように書くだけだが。

    #if _MSC_VER < 1800
    #define snprintf _snprintf
    #endif

ハマったのはプロジェクトのプリプロセッサ項目にダイレクトにsnprintf _snprintfと書いてあった部分だ。ソースコードはすべて修正したのに重複定義エラーが発生するので最初は皆目見当がつかなかった。

しかしよく考えるとそもそもこのようなWindows向けのパッチというのはC99に完全対応している今となってはそもそも無用なのかもしれない。_MSC_VERとかで分岐している部分を直せばよさそうだけれども、そこまではやる気はないかな