MacでlibusbJavaを使う
Mac OS X 10.6でlibusbを操作したいなぁ〜と思い、Scalaでコードを書いてみた。 早速実行してみると、やっかいなエラー発生。
Scala(JavaVM)からlibusbを操作するということは、Java→JNI→libusbとなるため、JNIのライブラリを用意する必要がある。 このファイルはlibusbJava.jnilibであり、コンパイルして作る必要がある。 以前、Windowsで似たようなことをやったときはDLLが提供されていたのでここでは悩まなかった。 ■ Browse libusb-win32 Files on SourceForge.net http://sourceforge.net/projects/libusb-win32/files/ Windowsはこんな風に一式提供されているわけですよ〜。
結論
libusbJava.jnilibは拾ってきた
結果から先に言うと、コンパイルが通らなかったため、libusbJava.jnilibは拾ってきた。 ■ entrainer - Revision 392: /trunk/EntrainerEEG/libusb/macosx/10.6 https://entrainer.svn.sourceforge.net/svnroot/entrainer/trunk/EntrainerEEG/libusb/macosx/10.6/ ここにMac OS X 10.6用があるのでこれを拝借。実行準備
実行時にはlibusbが適切な位置に存在することと、JNIがjava.library.pathに含まれている必要がある。 まずはlibusbの準備。sudo port install libusb-legacy cd /usr/local/lib sudo ln -s /opt/local/lib/libusb-legacy/libusb-legacy-0.1.4.dylib ./libusb-0.1.4.dylib sudo ln -s /opt/local/lib/libusb-legacy/libusbpp-legacy-0.1.4.dylib ./libusbpp-0.1.4.dylib
続いて実行時にJavaVMに渡す情報。
-Djava.library.path=/path/to/libusbJavaDir
これを指定しておかないとエラーが出ます。
Exception in thread "main" java.lang.UnsatisfiedLinkError: no usbJava in java.library.path
ここまでで、やっと実行環境が整った。サンプルコードを実行したところ、libusbは呼べてるみたいなので、あとは操作用のコードを書いていくだけ。 環境構築にやたらと手間取った。
出来なかったけど、やったこと
以下は色々と試したけど、結果的にコンパイル出来なかったので、あまり役に立たないかも?Antでコンパイル
■ Java libusb / libusb-win32 wrapper » Installation http://libusbjava.sourceforge.net/wp/?page_id=8 ここを参考にコンパイルを試みた。■ libusbjava - Revision 275: / https://libusbjava.svn.sourceforge.net/svnroot/libusbjava/ ソースコードはこちら。
ソースコードを持ってきて、Antを実行。
ant mac
エラーメッセージが色々と出てきた。
libusb.dylibが無いよ
libusb.dylibとlibusbpp.dylibが無いと言われた。 ここで見た初めての拡張子 "dylib" とは何だろう?と調べてみるとライブラリファイルだった。Linuxでいうsoファイル。 これをインストールするためにMacPortsを利用。sudo port install libusblibusbのインストールは完了したものの、libusbppが見当たらない。libusbをコンパイルしてみても出てこない。
■ libusb http://www.libusb.org/ オフィシャルサイトに行ってみるとバージョンが大きく2つに分かれているようだ。
Stable API: libusb-1.0 Legacy API: libusb-0.1
libusbjavaのオフィシャルサイトもよ〜く見てみるとこのような説明が書いてあった。
libusb 0.1: is supported libusb 1.0: has a completely new API is not supported (see the libusb wiki for details)さっき、MacPortsでインストールしたlibusbは1.0の方であり、libusbjavaがサポートしていないと判明。
sudo port uninstall libusb sudo port install libusb-legacylibusb 1.0は削除し、libusb 0.1をインストールし直した。
それでもコンパイルエラーが発生するので、LibusbJava.cppのincludeを修正したり、簡単な施策はいくつか試したものの、コンパイル出来ず〜。 そして諦めた。