ページ

2012年2月22日水曜日

MacOS X Lion で portaudio

クロスプラットフォームのオーディオIOライブラリであるportaudioを使ってみた。導入に少々手こずったのでメモ。

【環境】
MacOS X 10.7 (Lion)
Xcode 4.3 (Command Line Toolsインストール済)

【問題】
本家サイトのチュートリアル通りに ./configure &&  make すると
lipo: can't figure out the architecture type of: /var/folders/nc/xfr4g99532d8907r35nypqcc0000gn/T//ccNT0oeE.out
make: *** [src/common/pa_allocation.lo] Error 1

とかいうエラーが出てmakeが止まる。

【解決方法】
1.  portaudio/include/pa_mac_core.h の49行目
#include <audiotoolbox/audiotoolbox.h>
のコメントをはずす。

2.  portaudio/ で以下を実行
$ ./configure --disable-mac-universal

3. 生成されたMakefileの CFLAGS にある -Werror を削除

4. portaudio/ で make を実行
(いちど make に失敗している場合は make clean してから)

以上の手順で portaudio 自体のmakeは通るはず。ただしx86_64バイナリ専用(私はppcもi386も必要ない)。以下のファイルが生成されていればOK。

【プログラムのコンパイル方法】
portaudio/examples/paex_sine.cをコンパイルする例。こんな感じのMakefileで静的リンクできた。動的リンクはよくわからない。
CC = gcc
LIBS = -framework CoreAudio -framework AudioToolbox -framework AudioUnit -framework Carbon
INCLUDES = -I/(portaudioのパス)/include
LIBPA = /(portaudioのパス)/lib/.libs/libportaudio.a
OBJS    = paex_sine.o

paex_sine: $(OBJS)
$(CC) $(LIBS) -o $@ $(OBJS) $(LIBPA)
.c.o:
$(CC) $(INCLUDES) -c $<

【参考リンク】
Building PortAudio under OS X 10.7 Lion

3 件のコメント:

te26 さんのコメント...

初めまして、検索からたどってきました。私も同じようにportaudioをインストールしようとして、同類のエラーで困っています。blogの内容を実行してもうまくいきません。。。参考リンクなども見て、(Don’t forget to strip PPC code from the generated fat lib (man lipo) if you’re planning to submit to the Mac App Store!)が関係あるのか?とか考えたのですが、いかんせん力量不足でどうしていいのかも分かりません。何かご教授頂けると嬉しいです。
エラー文
llvm-gcc-4.2: error trying to exec '/usr/bin/../llvm-gcc-4.2/bin/powerpc-apple-darwin11-llvm-gcc-4.2': execvp: No such file or directory
lipo: can't figure out the architecture type of: /var/folders/gm/62k1k9jx7h1dzwwpsqy36wy80000gn/T//ccEBtqHw.out
make: *** [src/common/pa_allocation.lo] Error 1

Ryunosuke Daido さんのコメント...

powerpc関係のエラーが出るということは、MakefileのCFLAGSに-arch ppcが入っていませんか。configureの段階で何かがおかしいのかもしれません。あとmakeに失敗したら、毎度必ずmake cleanすることをお勧めします。

te26 さんのコメント...

返信ありがとうございます。Makefile内のCFLAGSの-arch ppcを削除するなりしたのですが上手くいかず、結局./configureのオプションでCFLAGS='-arch i386'なしで実行するとすんなり上手く行きました。OSが Lionならこれでいくのでしょかね、謎ですがとりあえず上手く行って良かったです。ありがとうございました。