Załaduj bibliotekę DLL (używając JNA) do pakietu OSGi

OSGi nie może znaleźć mojego pliku DLL i nie mogę zrozumieć dlaczego.

Obecnie mam plik DLL (foo.dll) w katalogu głównym mojego pakietu próbowałem go także mieć wlibs informator.

Manifest dla danego pakietu wygląda mniej więcej tak:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: foobundle
Bundle-SymbolicName: com.foo.bar
Bundle-Version: 1.0.0
Bundle-Vendor: me
Import-Package: com.sun.jna,
 com.sun.jna.ptr,
 com.sun.jna.win32
Export-Package: com.foo.bar
Bundle-NativeCode: foo.dll;
 osname=WindowsXP;
 processor=x86

Następnie w moim interfejsie JNA wykonuję loadLibrary (zgodnie z dokumentacją):

public interface MyFooInterface extends com.sun.jna.Library{
    static final MyFooInterface INSTANCE = (MyFooInterface)com.sun.jna.Native.loadLibrary("foo", MyFooInterface .class);

    // specific interface defs here...
}

Następnie w innej klasie próbuję użyć interfejsu JNA

// ...code
int var = MyFooInterface.INSTANCE.bar();
// ...more code

Dostarczam JNA za pośrednictwem innego pakietu (który eksportuje com.sun.jna i inne pakiety zaimportowane powyżej), ale próbowałem także pakować go za pomocą zdefiniowanego tutaj pakietu (w tym przypadku dodałem go do ścieżki klasy itp.).

Próbowałem też określićBundle-NativeCode: /foo.dll.

Interesujące są również odpowiednie właściwości OSGi (które wykorzystałem przy użyciugetprop)

org.osgi.framework.os.name=WindowsXP
org.osgi.framework.processor=x86

Nawet po tym wszystkim (i przy każdej próbie, którą wykonałem) zawsze kończę się następującym błędem (i nie pokazanym śladem stosu):

java.lang.UnsatisfiedLinkError: Unable to load library 'foo': The specified module could not be found.

... więc czego mi brakuje?

Edytować: Powinienem również zauważyć, że przetestowałem i odniosłem sukces w kodzie interfejsu JNA i bibliotece DLL, z którą rozmawia w ramach programu JUnit Test.

Edytuj 2: Dodanie tego kodu do klasy, która wywołuje bibliotekę, pozwala JNA znaleźć bibliotekę (kiedyNative.loadLibrary zostaje wywołany później). Wydaje się, że powinienem być w stanie uniknąć tego wywołania w oparciu o dyrektywę Bundle-NativeCode w Manifeście. Oczywiście po załadowaniu biblioteki Native.loadLibrary chwyta istniejącą instancję, ale wolałbym nie polegać na taktyce specyficznej dla zamówienia.

static{
    System.loadLibrary("foo");
}

questionAnswers(3)

yourAnswerToTheQuestion