JNI Shared Object

Generic1

Top Contributor
Hi,

ich habe ein shared object vorliegen und möchte mit Java darauf zugreifen,
Weiß jemand wie ich das mit JNI machen kann.
Ich hab das zwar mit einer dll schon mal gemacht (header Datei aus Java-code generieren) aber mit einem shared object ist mir das nicht klar die man das machen kann, vor allem weil ich nicht weiß welche Methoden im shared object definiert und ausprogrammiert sind.
Weiß jemand wie man sowas macht,
Besten Dank,
Generic1
 

Generic1

Top Contributor
Hi,

ich hab den C++ Code aufgetrieben und auch das make file, mit dem man die *.so draus macht.
Das C++ Programm besteht aus einer Header und mehreren Cpp Dateien.

Ich hab jetzt auch ein JNI Tutorial durchgemacht.
Da schreibt man ja die nativen Methoden in die Java Klasse:

Java:
private native void test();

und wirft dann den javah an um den C- Header zu erzeugen und dann den C Code zu schreiben.

Ich bräuchte jetzt den umgekehrten weg, ich hab ja die Header Datei und den C(++) Code und ich bräuchte die Java Klasse,

Wie würdet Ihr das machen , gibts da was im JDK?

Besten Dank,
lg
Generic1
 

irgendjemand

Top Contributor
[WR]es gibt unterschiede zwischen JNI und JNA[/WR]

JNI ist das was du beschrieben hast : java-klasse schreiben , compilen , header erzeugen , lib schreiben

JNA ist das was du suchst : zugriff aus java auf bereits vorhandene libs

btw : ob nun SO oder DLL ... es wird beides als "Programmbibliothek" bezeichnet ... nur das mal DLL *dynamic link lib* eben nur unter windows findet ... und SO *shared object* eben nur unter unix ... die aufgabe ist die gleiche ...

also musst du jetzt nicht nach JNI suchen ... sondern nach JNA ...

das du den source der lib aufgetrieben hast ist für dich schon mal von vorteil da du nun weist auf welche funktionen du zugriefen kannst ...

auch kannst du dir mit dem vorhandenen source material eine JNI-bridge bauen ... also den vorhanden code so editieren das er um einen JNI-header erweitert wird ... dann kann man das ganze auch "JNI like" bauen ...
 

Generic1

Top Contributor
Das ist schon klar, dass ein Unterschied zwischen JNA und JNI ist,
Ich kann JNA nicht verwenden, da ich einen ARM Processor hab und JNA auf diesen nicht funktionieren.
Deshalb muss ich JNI verwenden und da ist eben jetzt meine Frage wie ich das machen kann, wenn ich schon eine Header- Datei habe, wie ich dann über JNI die Methoden, die in der Header- Datei deklariert sind, aus Java aufrufen kann.
 

irgendjemand

Top Contributor
Ich empfehle dir das hier.
Gruß,
Freak

absoluter fail-post und thema nicht verstanden ... noch mal lesen ...


@TO
DAS geht NICHT

wie ich bereits sagte : wenn du eine vorhandene lib hast musst du mit JNA arbeiten ...
*da von ARM cpu die rede ist gehe ich mal von einem android-smartphone/tablet aus*
JNI kannst du NUR verwenden wenn du die lib dann auch selbst "schreibst" ... oder zu mindest anpasst ...

genau desswegen gibt es ja diese unterscheidung zwischen JNI und JNA ...

um mich zu wiederholen

JNI : für selbstentwickelte *oder meinetwegen modifizierte* libs welche NACH dem compiling der java-class gebaut werden
JNA : für zugriff auf bereits existierende libs welche UNABHÄNGIG vom java-code geschrieben und gebaut wurden

und das JNA calls NICHT funktionieren sollen kann ich mir leider beim besten willen nicht vorstellen ... denn JNI wird intern ähnlich ausgeführt ... nur die explizite funktions-signatur unterscheidet sich ...
was ich mir jetzt vorstellen könnte das JNA in der benutzten VM einfach nicht implementiert wurde ... zumindest nicht zur dierekten nutzung ... da ja JNI mit einer eigenen lib scheinbar funktioniert

das einzige was du jetzt noch machen könntest wäre eine art wraper-lib bauen ...

du schreibst dir eine class ... compilest diese ... erzegust das header file ... schreibst deine lib ... und programmierst in dieser das diese die vorhandene lib nutzen soll ... die calls weiterreicht und die returns an die VM gibt ... was aber bestimmt NOCH umständlicher wird als das dir zum glück zugänglich source material entsprechend zu erweitern ...

aber mit JNI auf eine unabhängige lib zu greifen GEHT NICHT ... dafür gibt es JNA ...
 

Generic1

Top Contributor
absoluter fail-post und thema nicht verstanden ... noch mal lesen ...
du schreibst dir eine class ... compilest diese ... erzegust das header file ... schreibst deine lib ... und programmierst in dieser das diese die vorhandene lib nutzen soll ... die calls weiterreicht und die returns an die VM gibt ... was aber bestimmt NOCH umständlicher wird als das dir zum glück zugänglich source material entsprechend zu erweitern ...

OK, besten Dank soweit,
ich habe eine ARM9 CPU, dann ein abgespecktes Linux (Emlix) und dann auch noch eine abgespeckte JVM (J9) auf meinem Android Handy. Wenn du in die jna.jar schaust, da gibt es unterstützung unter anderem für i386, AMD.., usw aber nicht für die ARM.
Ich hab im Netz dann noch was für einen ARMEL Processor gefunden aber ARMEL funktioniert auch nicht (ist ein anderer Processor als der ARM)

Das mit dem Wrapper scheint mir die einzige Lösung zu sein.
Ich würde da so vorgehen - was sagst du dazu:

1. methoden in die Java Klasse
2. mit javah aus Java Klasse die Headerdatei erzeugen
3. den Inhalt der HeaderDatei in die Header- Datei der vorhandenen C++ Applikation kopieren
4. die Methoden in einer *.cpp ausprogrammieren, sprich einfach in den Methoden weiter delegieren

Würde das gehen, hat das schon mal jemand ausprobiert, einfach den erzeugten Headercode in einen anderen Header zu kopieren?
Besten Dank,
 

Generic1

Top Contributor
So hab das ganze jetzt mal ausprobiert, leider ohne Erfolg.

Das C++ Programm schaut so aus:

Code:
.h          .h
 |           |
.cpp       .cpp
  |          |
.so         .so

Also es werden beim kompilieren verschiedene so Dateien erstellt und die werden dann in eine so gelinkt/kopiert und dann wird die Gesamt- so- Datei nach /usr/lib kopiert -> das steht im makefile.

Ich hab jetzt auch eine JNI- so erzeugt und auch mitlinken/kopieren lassen aber leider bekomm ich den fehler, dass meine so nicht gefunden wird.

Hat da jemand eine Ahnung ob und wie das geht das ich zu meiner JNI- so bzw JNI .h/.cpp komme welche sich in der Gesamt- so Datei befindet?

Besten Dank
 

irgendjemand

Top Contributor
ums dir mal zusammenzufassen : TO wollte wissen wie mit mit JNI auf eine bereits vorhandene system-lib zugreift ... was nun mal NICHT geht
entweder JNA ... oder selbst eine lib schreiben *bzw modifizieren* das diese JNI fähig wird ...

hoffe du hast jetzt das problem verstanden
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L JPA keine shared primary key Allgemeine Java-Themen 11
E Java Shared Memory? Allgemeine Java-Themen 6
F Java Native/Shared Library (.so) laden macht Probleme Allgemeine Java-Themen 3
kaoZ Best Practice Shared Actions , Referenzen in Gui halten ? Allgemeine Java-Themen 25
J Zugriff auf Dateien auf einem shared Folder? Allgemeine Java-Themen 3
H Object cast exception Allgemeine Java-Themen 7
P JDK nicht installiert in Net Object Fusion Allgemeine Java-Themen 7
Erwin82a Object cannot be converted to Custom Class in Lampda Expression Allgemeine Java-Themen 2
Zeppi Cast Object in Generics Allgemeine Java-Themen 4
MoxxiManagarm Mapping into existing object Allgemeine Java-Themen 15
coolian Swing erstellt fillreckt immmer ein neues object Allgemeine Java-Themen 13
N Wo ist Object.class ? Allgemeine Java-Themen 0
R Erste Schritte Object reference funktioniert nicht. Wie mach ichs richtig? Allgemeine Java-Themen 3
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
N Gibt es etwas allgemeineres as Object? Allgemeine Java-Themen 16
Bananabert Swing jtree : image als user object Allgemeine Java-Themen 2
N ArrayList in eigenem Object nicht richtig serialisierbar Allgemeine Java-Themen 14
B [Android] EditText-Object ist null - Nimmt nicht den Wert des enthaltenen Textfeldes ein Allgemeine Java-Themen 2
Z Vergleich zwischen int und Object Allgemeine Java-Themen 1
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T InvalidClassException - Read null attempting to read class descriptor for object Allgemeine Java-Themen 8
J Ist eine Instanz von einem bestimmten Object Typ? Allgemeine Java-Themen 6
L Sortieren von "Map<String, Object>" Allgemeine Java-Themen 2
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
G REST- Object darstellung Allgemeine Java-Themen 6
C Object.equals() liefert falschen Wert? Allgemeine Java-Themen 14
darekkay Generics: Wildcard und Object Allgemeine Java-Themen 5
O Socket Object wird scheinbar falsch empfangen Allgemeine Java-Themen 6
N Klasse/Object Eigenaufruf Allgemeine Java-Themen 5
B Variable class in java.lang.Object Allgemeine Java-Themen 11
S Klassen Zuorgnung Object-char Allgemeine Java-Themen 2
N java.lang.IllegalMonitorStateException: object not locked by thread before notify() Allgemeine Java-Themen 2
S Type mismatch: cannot convert from Object to float Allgemeine Java-Themen 3
A Input/Output Serialisierung und Object.hashCode() Allgemeine Java-Themen 3
M Jaxb und JPA: A cycle is detected in the object graph Allgemeine Java-Themen 5
H double dispatch und equals(Object) Allgemeine Java-Themen 6
J Datentypen Problem mit Date-Object Allgemeine Java-Themen 2
B Variablen Alle RenderingHints.Keys (KEY_*) in Array + alle RenderingHints.Keys (VALUE_*) in Object[] Allgemeine Java-Themen 8
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
L Object Instanz anhand eines Strings Allgemeine Java-Themen 10
A Datei als Object einlesen und das Object als Singleton instance setzen. Allgemeine Java-Themen 13
DEvent embedded Object Database in Text Format Allgemeine Java-Themen 5
J Casting Problem Object, Double und String Allgemeine Java-Themen 3
M Object-Instanz in Date übersetzen Allgemeine Java-Themen 6
P Tree Object structure Allgemeine Java-Themen 19
G Object mit clone kopieren Allgemeine Java-Themen 21
J merkwürdig: Object Allgemeine Java-Themen 6
woezelmann Object nach Deserialisierung nicht mehr gleich Allgemeine Java-Themen 13
Iron Monkey Object in Datei effizienter lesen / schreiben Allgemeine Java-Themen 13
L Object = null? Allgemeine Java-Themen 16
dayaftereh Serializable und Object In/Out Stream Allgemeine Java-Themen 2
T Object auf Double, Int, String testen Allgemeine Java-Themen 5
N serialize deserialize java object über string Allgemeine Java-Themen 8
N getName() of reflection Object Allgemeine Java-Themen 4
B Probelm mit File Object Allgemeine Java-Themen 6
G NoClassDefFoundError: java/lang/Object Allgemeine Java-Themen 4
S Liste Object Löschen Allgemeine Java-Themen 7
P not enough space for object heap - Trotz mehr RAM? Allgemeine Java-Themen 6
MQue List<String> aus List<Object> generieren Allgemeine Java-Themen 2
M ArrayList<Object[]> und toArray() Allgemeine Java-Themen 5
Daniel_L LinkedList vom Typ Object-Array? Allgemeine Java-Themen 4
B Warum return type Object ? Allgemeine Java-Themen 4
D Generisches Object erstellen Allgemeine Java-Themen 2
M Databinding von Object zu properties-Datei Allgemeine Java-Themen 10
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
A NullPointer bei konvertierung von byteArr --> Object Allgemeine Java-Themen 3
foobar Object to byte[] ohne Serializable Allgemeine Java-Themen 6
reibi Object clonen spezial Allgemeine Java-Themen 8
C casten vom Typ Object nach Double[][] Allgemeine Java-Themen 2
X cannot convert from Object[] to Integer[] Allgemeine Java-Themen 2
G JSON Object auslesen Allgemeine Java-Themen 1
T cast Object to Double[] Allgemeine Java-Themen 2
G Object. Wrapper Allgemeine Java-Themen 12
V Object durchsuchen Allgemeine Java-Themen 4
U eigene Datenstruktur ArrayList<String> nach Object [][ Allgemeine Java-Themen 2
T "Object o = new Object()" vs. "new Object()&q Allgemeine Java-Themen 8
T Object -> byte[] Allgemeine Java-Themen 5
M Implementation von Zugriffen auf Object[index] in der JVM Allgemeine Java-Themen 9
T Klasse => Primitiv ? Object instanceof Klasse Allgemeine Java-Themen 2
B mit methode ein object zurückgeben. Allgemeine Java-Themen 5
R Object Dynamisch erzeugen (Reflection API) Allgemeine Java-Themen 22
T HashMap (String, Object(String , int)) nach int sortieren Allgemeine Java-Themen 7
P Typ Object in socket umwandeln Allgemeine Java-Themen 4
G Object cast via Reflection Allgemeine Java-Themen 8
Zed JList Object einfügen und Text anzeigen Allgemeine Java-Themen 3
MQue Object in Integer umwandeln Allgemeine Java-Themen 3
G Error: Hashtable Type safety: The method put(Object, Object) Allgemeine Java-Themen 6
T double to object Allgemeine Java-Themen 3
S File Object zu Directory machen ? Allgemeine Java-Themen 9
V Brauche dringend Hilfe. Object-handling Allgemeine Java-Themen 4
N Warning "The Cast from Object to" Allgemeine Java-Themen 9
K Threads und ein übergeordnetes Object Allgemeine Java-Themen 7
F Zugriff mittels getObject() oder this.object ? Allgemeine Java-Themen 8
W Object -> isPrimitiv? Allgemeine Java-Themen 7
D Cast schlägt fehl : Object[] zu Button[] Allgemeine Java-Themen 2
S Object nach Integer umwandeln Allgemeine Java-Themen 13
R object zu array casten. Allgemeine Java-Themen 2
N Map Object Allgemeine Java-Themen 13
G Eine C/C++ Referenz in einem Java Object speichern Allgemeine Java-Themen 5
N Ermitteln welchen Typ ein "Object"-Objekt enthält Allgemeine Java-Themen 11

Ähnliche Java Themen


Oben