Skip to main content

2 posts tagged with "libusbJava"

View All Tags

· 3 min read

前回、MacでlibusbJavaを使うことを書いた。

■ MacでlibusbJavaを使う | Ken's evitation

http://blog.teapla.net/?p=1153

JNIは解決し、実行は出来たものの、実行するとなぜかUSB Busを見つけてくれない。libusbJavaからUSB Busを見つけられるようにしてあげる必要がありそうだ。

libusbが怪しい

JNIでlibusbは呼び出せているということは、libusbが怪しそうだ。 実際、libusbは1.0と0.1の2つが存在する。

■ libusb

http://www.libusb.org/

libusbJavaは1.0をサポートしていないということで、Macにはlibusb 0.1を入れていた。それでうまく動かないということは、1.0を使った方がいいということなのかもしれない。 ただ、libusbJavaがサポートしていないと言っている以上、そのままでは使えない。そこで、usblib-compatというライブラリに注目した。 compat(ible)というだけあって、0.1も1.0もうまくやってくれるだろうという期待を込めて!

sudo port uninstall libusb-legacy sudo port install libusb sudo port install libusb-compat

余計かもしれないlibusb 1.0(legacy)を削除し、必要そうなlibusb 1.0をインストール。

JNILIBからの参照先

このままではJNILIBから参照するライブラリが無いと言われるので、シンボリックリンクを張る。
cd /usr/local/lib sudo ln -s /opt/local/lib/libusb.dylib ./libusbpp-0.1.4.dylib sudo ln -s /opt/local/lib/libusbpp.dylib ./libusb-0.1.4.dylib
libusb 1.0にはlibusbppというライブラリが存在しないので、libusbとlibusbppを同じファイルにシンボリックリンク。 なんとなく、libusbppがlibusbに取り込まれたんじゃないかなぁ〜という推測を元に。

結果

USB Busを認識するようになった!

JNILIB作成時にlibusbppが無いと言われていたが、もしかしたら、これでJNILIBも作れるようになったのかもしれない。と思って試してみたが、JNILIBの作成は失敗した。 また必要になったときにでも改めてやってみよう。

· 5 min read

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.6https://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 » Installationhttp://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 - GitHubhttp://github.com/stefanofornari/usbjava2/tree/09e0f610bfde0ba287642fb74d339ea9b0bb8c1dこんなのも見つけたが、これもうまくいかなかった。