# OSGi & native DLLs



## BDiegelmann (18. Oktober 2006)

Hi zusammen,

bin gerade dabei, eine native DLL mit der Option "Bundle-NativeCode" in der Manifestdatei zu laden. Das scheint soweit auch gut zu funktionieren. Das Problem ist nur, das diese DLL weitere DLLs benötigt. Diese werden dann aber nicht mehr gefunden wenn ich das so mache.

Jetzt hab ich versucht die entsprechenden DLLs auch über native code zu laden, aber auch das schlägt fehl. Hab keine Ahnung wo (in welchem Pfad) das Framework die Dateien sucht.
Kann mir da jemand helfen?


Das ist die Manifest Datei:

```
Manifest-Version: 1.0
Bundle-Description: Treiber fuer die PC104 CAN-Card von Peak
Bundle-Name: CAN-Driver
Bundle-ClassPath: ., pcanlight_jni.jar
Bundle-Activator: edag.can.controller.peak.Activator
Import-Package: org.osgi.framework, org.osgi.service.log
Bundle-Vendor: EDAG
Bundle-SymbolicName: canDriver
Bundle-Version: 1.0.0
Bundle-NativeCode: pcanlight_jni.dll;processor="x86";osname="WindowsXP", PCAN_2ISA.dll;processor="x86";osname="WindowsXP", PCAN_ISA.dll;processor="x86";osname="WindowsXP"
```

Im Anhang befindet sich der Inhalt des JAR-Archivs.

Hab weitere Versuche unternommen um das Bundle ans Leben zu bringen.
Habe mir die Sourcen besorgt die die DLL laden. Dort habe ich den Befehl System.loadLibrary() auskommentiert da dies ja vom Framework gemacht werden soll (Wenn ich das richtig verstanden habe).

Nun bekomme ich einen Ecxeption:

java.lang.UnsatisfiedLinkError

Ich denke, dass das Framework jetzt die DLL gar nicht geladen hat. Oder was bedeutet die Exception?


----------



## Thomas Darimont (19. Oktober 2006)

Hallo!

Wenn du mit dem Bundle-NativeCode Element arbeitest mußt du die nativen Libs in der Reihenfolge angeben wie sie sich aus ihreren Abhängigkeiten ergibt.

Beispiel:
a.dll, b.dll, c.dll
a hängt von c und c von b ab. Die Reihenfolge in der die Libs angegeben werden müssen wäre dann:
b.dll; c.dll; a.dll

Soweit mal AFAIK.

Gruß Tom


----------

