# JNI in Eclipse Plugin



## virus (7. Mai 2008)

Ich versuche gerade vergeblich eine native library in einem Eclipse plugin zu laden. 


```
System.load("/pfad/zu/meiner/library.dylib");
```

Was auch noch funktioniert. Wenn ich nun aber eine native methode aufrufen möchte erhalte ich folgenden fehler:


```
org.eclipse.core.runtime.CoreException[1]: java.lang.UnsatisfiedLinkError: nameMeinerNativeMethode
```

was mach ich falsch? wie krieg ich die library so geladen das es funktioniert? 

Wenn ich genau das selbe nicht in einem Eclipse plugin mache funktioniert es problemlos. :-/


----------



## Wildcard (7. Mai 2008)

Das unsägliche Laden über einen Pfad ist glücklicherweise nicht mehr nötig in einem OSGi Container.
Pass einfach dein Bundle Manifest an:

```
Bundle-NativeCode: lib/eineDll.dll; processor="x86"; osname="win32",
lib/eineSo.so; processor="x86"; osname="linux"
```


----------



## virus (7. Mai 2008)

Hmmm.... irgendwie mach ich noch was falsch.



```
Bundle-NativeCode: lib/mylib.dylib; processor="x86"; osname="Mac OS X"
```

das lib Verzeichnis befindet sich im root des Projektverzeichnis. Sollte doch stimmen oder?


(ich erhalte immer noch den selben fehler wie vorhin)


----------



## Wildcard (7. Mai 2008)

Wie lädst du die Library, was steht in der .log?


----------



## virus (7. Mai 2008)

Jezt bin ich ein bischen verwirrt, sorry!
Reicht 

```
Bundle-NativeCode: lib/mylib.dylib; processor="x86"; osname="Mac OS X"
```
nicht aus um die library zu laden? 

Und welches .log meinst du? (In der konsole gibt es keinen andere output als die Exception)


----------



## Wildcard (7. Mai 2008)

```
System.loadLibrary(name)
```



> Und welches .log meinst du? (In der konsole gibt es keinen andere output als die Exception)


Du machst das noch nicht so lange, oder?  :shock: 
$workspace/.metadata/.log


----------



## virus (7. Mai 2008)

Ne ich bin da noch nicht ganz zuhause ;-)

also wenn ich as System.loadLibrary mache dann erhalte ich 

```
org.eclipse.core.runtime.CoreException[1]: java.lang.UnsatisfiedLinkError: no mylib in java.library.path
```

und im log steht irgendwie auch nichts diesbezüglich...


----------



## Wildcard (7. Mai 2008)

Was gibst du bei 'mylib' an? Das muss der Name der Bibliothek sein, nicht die Datei.


----------



## virus (7. Mai 2008)

ja name der library ist auch name des files das sollte stimmen. ich finde es eher etwas komisch was in der java.library.path drinn ist:


```
.:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
```

Meine library ist aber in keinem der pfade.. somit wird er sie ja wohl auch nicht finden? Wofür mach ich denn überhaupt den eintrag im MAINFES.MF ?


----------



## virus (7. Mai 2008)

ah ok ne sry also wenn ich die library jezt mit System.loadLibrary lade kommt nicht mehr no mylib found sondern wieder wie am anfang: 


```
org.eclipse.core.runtime.CoreException[1]: java.lang.UnsatisfiedLinkError: nameMeinerNativeMethode
```


----------



## Wildcard (7. Mai 2008)

> ja name der library ist auch name des files das sollte stimmen


Das kann fast nicht sein, die Datei endet normalerweise mit .so, .dll oder ähnliches, der Name nicht.


----------



## virus (7. Mai 2008)

ja es ist so die datei ist:

```
lib + nameDerLibrary + .jnilib
```
und loadLibrary rufe ich dementsprechend so auf: 
	
	
	
	





```
System.loadLibrary(nameDerLibrary)
```
(sry für die verwirrung)

Ausserhalb vom Eclipse plugin: alles funktioniert prima. (auch mit loadLibrary)

Wenn ich den code 1:1 in ein Eclipse plugin kopiere und zusätzlich den eintrag im manifest mache funktionierts nicht mehr :-(
Ich blick da echt nicht mehr ganz durch...  aber schon mal ein grosses dankeschön dass du dir soviel zeit und mühe nimmst um mir zu helfen!!


----------



## Wildcard (7. Mai 2008)

> lib/mylib.dylib; processor="x86"; osname="Mac OS X"


Du hast aber schon einen x86 Prozessor, oder?  ???:L


----------



## virus (8. Mai 2008)

Ja ich hab schon einen x86 und keinen PPC mehr ;-)


```
BootLoader constants: OS=macosx, ARCH=x86, WS=carbon, NL=en_US
```
ich hab noch bemerkt das der osname "macosx" ist und nicht "Mac OS X" aber das hat leider auch nichts gebracht.

Muss ich denn irgend etwas anders mit der library machen? Muss ich sie anders compilieren für ein eclipse plugin? Kann doch kaum  sein wenn es ausserhalb des plugins funktioniert oder?


----------



## virus (8. Mai 2008)

jeeehhaaaa!! :-D hab den fehler gefunden.... :-D
im eclipse plugin hatte ich die Klasse mit den native methoden in einem anderen package was dan natürlich auch ein anderes header file ergibt ;-)
Jetzt funktionierts perfekt!

Dake viel vile vile vielmal für deine hilfe!!


----------



## Guest (22. Mai 2008)

Is habe dasselbe problem. 
Kannst du vielleicht die genaue file struktur und manifest file als beispiel geben?


----------



## Wildcard (22. Mai 2008)

Öffne doch einfach ein Plugin das nativen Code enthält (SWT), dann hast du doch ein Beispiel.


----------



## virus (23. Mai 2008)

Mein plugin kannst du dir sonst hier anschauen:
http://www.universal-sync.com/svn/trunk/com.universalsync.iCalPlugin/


----------

