跳慮跋考

興味も思考も行先不明

Cross compiling a program with PortAudio for Windows by MinGW on Linux

最近は VirtualBox 上の ubuntu で開発することで Windows の呪縛から解き放たれていたんですが(まあ Windows がホストOSではありますけど)、どうもマイク入力が VirtualBox ではサポートされていない様子。USB マイクなら大丈夫とか聞くんですが。
開発環境は他のプログラムとも合わせて Linux にしておきたいので、プログラムを Windows 向けにクロスコンパイルしようと思い立ちました。
環境や使用した(された)バージョンは以下です:

  • Microsoft Windows 8 [Version 6.2.9200]
  • VirtualBox 4.2.12
  • ubuntu 12.04 LTS
  • Microsoft Visual Studio Professional 2012 [Version 11.0.50727.1]
  • PortAudio V19 (2011-11-21)
  • MingGW 4.2.1

PortAudio のコンパイル

公式のチュートリアル(http://portaudio.com/docs/v19-doxydocs/compile_windows.html)に従えば大体大丈夫でしょう。
preprocessor definitions の設定は以下のようにしました:

PA_USE_ASIO=1
PA_USE_DS=1
PA_USE_WMME=1
PA_USE_WASAP=1
PA_USE_WDMKS=1
PA_USE_SKELETON=1
PA_WDMKS_NO_KSGUID_LIB

最後のは「エラー 38 error LNK1104: ファイル 'ksguid.lib' を開くことができません。」なるエラーを回避する為です(http://music.columbia.edu/pipermail/portaudio/2011-August/012848.html)。
これで運が良ければ Win32/Release や、構成マネージャを弄れば x64/Release にライブラリファイルが生成されているでしょう。

テストコードのコンパイル

まず MinGW を入れます。

$ sudo apt-get install mingw32

そして上で生成された portaudio_x86.lib とかを portaudio/test なり何なりに持ってきて

$ i586-mingw32msvc-gcc patest_read_record.c -I../include portaudio_x86.lib

生成されたプログラムを Windows 上で実行すれば、ちゃんと録音したりしてくれる筈です。