MacでlibusbJavaを使う

Ken published on
5 min, 948 words

Categories: Programming

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 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 こんなのも見つけたが、これもうまくいかなかった。