lame-3.97をdmcでビルドする
Windows上でdからlameをさわろうとしてlibmp3lame.libをビルドしようと試行錯誤したのでそのメモ。ビルドおよびテストプログラムとのリンクもできたけど、動いてないので未完(1/6 追記:ビルド手順自体は間違っていなかったっぽい)。
VCはオブジェクトファイルのフォーマットが違う(VCはCOFF、dmdはOMF)、bccは未解決シンボルが出る(_fdivとか_turboなんちゃらとか)のであきらめ、dmdと同じくDigitalMarsが出してるdmcなら大丈夫だろうということで、これを用いてビルドすることにする。手順:
- nasmを使うのでhttp://sourceforge.net/projects/nasm/からダウンロードし、パスを通す
- makeはbccのを使う(Makefileが見つかったので)ので、bccのパスがdmcのパスより先に見つかるようにしておく(dmc.exe、lib.exeはbccとかぶらないので問題なし)
- Makefileを修正
- config.hを修正
- uint32_tが定義されるようにする(当該箇所の #elif defined(__GNUC__) を #else に変えるとか)
- libmp3lame\id3tag.cを修正
- snprintfをsprintfに変える(当然引数も合うように)
以上。make -fMakefile.B32 とすると、frontendのビルドには失敗するけどlibmp3lame.libはlibmp3lameフォルダにできている。dmdでのテストプログラム(自作)とのリンクも成功。でも動かない。
しかし並べてみると大したことしてないのに、なんかやたら時間を食ったよなあ。そういうもんだというのはわかるけど。
(1/6 追記)なぜかWindows上ではdout.writeLine()が動かなかったのでどこでこけてるのか特定するのに苦労したけど、linux上で動かしてみると、ポインタを渡すところでdの配列を渡していたのがまずかったようで、その後テストプログラムをデバッグしたら少なくとも単純なエンコード・デコードはできるのを確認した。というわけでlameのビルド自体は上記の通りで良かったらしい。