JNI

e9926044

Bekanntes Mitglied
Hallo,

hat jemand von euch schon mal über JNI auf *.so- Files zugegriffen bzw. mittels JNI- Methoden in der *.so aufgerufen.
Weiß jemand ob das funktioniert?
lg
 

c_sidi90

Top Contributor
Die Möglichkeit ist gegeben. Hast du schon Code oder hast du noch garnichts probiert?

Es gibt auch unterschiede für welches OS die Datei kompiliert wurde (.os File), dementsprechend musst du ggf. beim Start von Java Parameter übergeben. Häufig vergessen Leute z.B. die Kompatiblität zu 32 und 64bit Systemem zu prüfen (-d32, -d64). Wenn du die Lib in deiner SharedLib in Buildpath hast, kannst du normalerweise mit:

Java:
System.out.println(System.getProperty("java.library.path"));
        System.loadLibrary("HelloWorld");

Das File laden.

In diesem Beispiel ist der Dateiname der sharedobject Datei HelloWorld.so. Gab es keine Exception kannst du eine native Methode mit z.B.

Java:
public native void blabla();
deklarieren.

Die Methode blabla() ist in der .so definiert.
 
Zuletzt bearbeitet:
R

reNur

Gast
Ich hab am Rande meiner Bachelorarbeit ziemlich viel damit machen müssen. Funktioniert natürlich - der Zugriff von JNI auf dll bzw. auf so-Files ist ja ein Hauptanwendungsgebiet, sonst würde es ja auch wenig Sinn machen.
Es gibt ein ausgezeichnetes JNI Buch von Sheng Liang, das würde ich mir mal reinziehen (sind allerdings mehr als 300 Seiten). Da wird alles sehr verständlich erklärt, und gezeigt was man mit JNI so alles anstellen kann.
 
I

irgendjemand

Gast
MAKE selbst ist ein programm unter unix ...
kann daher nicht via JNI ausgeführt werden sondern nur via Runtime.exec() bzw ProcessBuilder ...

configure und make haben mit JNI wenig zu tun ...

JNI/JNA bieten lediglich die möglichkeit in java eine brücke zu DDL/SO *also LIB files* herzustellen und einen bi-direktionalen austausch von daten zu ermöglichen ... dierekt programme selbst kannst damit zwar unter umständen steuern *LIB-hook* ... aber ein anderes programm AUSFÜHREN ist wie gesagt die aufgabe von Runtime.exec() bzw dem ProcessBuilder ..
 

Oben