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を実行。
エラーメッセージが色々と出てきた。
libusb.dylibが無いよ
libusb.dylibとlibusbpp.dylibが無いと言われた。 ここで見た初めての拡張子 "dylib" とは何だろう?と調べてみるとライブラリファイルだった。Linuxでいうsoファイル。 これをインストールするためにMacPortsを利用。
sudo port install libusb
libusbのインストールは完了したものの、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-legacy
libusb 1.0は削除し、libusb 0.1をインストールし直した。
それでもコンパイルエラーが発生するので、LibusbJava.cppのincludeを修正したり、簡単な施策はいくつか試したものの、コンパイル出来ず〜。
そして諦めた。
usbjava2
■ stefanofornari's usbjava2 at 09e0f610bfde0ba287642fb74d339ea9b0bb8c1d - GitHub
http://github.com/stefanofornari/usbjava2/tree/09e0f610bfde0ba287642fb74d339ea9b0bb8c1dこんなのも見つけたが、これもうまくいかなかった。