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.

Другие вопросы по тегам