EXCEPTION_ACCESS_VIOLATION при доступе к API LeapMotion в OSGi
Я пытаюсь использовать новый датчик Leap Motion в OSGi (Феликс), но в итоге получаю EXCEPTION_ACCESS_VIOLATION.
В своем манифесте я объявляю Bundle-NativeCode, такой как
<Bundle-NativeCode>
x86/Leap.dll;x86/LeapJava.dll;osname=win32;processor=x86
</Bundle-NativeCode>
Конечно:
- Простая программа с теми же библиотеками вне OSGi работает отлично
- две библиотеки находятся в моем комплекте в папке 'x86'
- "osname=win32; процессор =x86" работает для меня (был протестирован с другими Bunbles
После декомпиляции jar-файла Leap Motion я увидел, что LeapJava.dll - единственная загружаемая библиотека (с использованием System.loadLibrary("LeapJava")). Возможно ли, что они не загружают свою другую библиотеку правильно?
Любая идея?
Редактировать 1: как представил разработчик Felix, эта ссылка может быть полезной http://wiki.osgi.org/wiki/Dependencies_In_Native_Code
1 ответ
С помощью Neil Bartlett и чтения http://wiki.osgi.org/wiki/Dependencies_In_Native_Code мне в итоге удалось заставить Leap Motion работать в OSGi.
Вот что я сделал:
- И Leap.dll, и LeapJava.dll находятся в папке x86 в моем комплекте (я на WindowsXP 32bit)
Добавил следующее в мой META-INF/MANIFEST.MF:
<Bundle-NativeCode> x86/Leap.dll;x86/LeapJava.dll;processor=x86;osname=win32 </Bundle-NativeCode>
В своем коде перед созданием com.leapmotion.leap.Controller я вызвал System.loadLibrary("Прыжок"), чтобы предварительно загрузить библиотеку Leap.dll. Следуя правилам, описанным в http://wiki.osgi.org/wiki/Dependencies_In_Native_Code, мне нужно только предварительно загрузить Leap.dll, потому что LeapJava.dll загружается с помощью Leap Java API.