Announcement

Collapse
No announcement yet.

Java Native Interface (JNI)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Java Native Interface (JNI)

    Ich versuche gerade eine bestehende C++ API in form einer libXXX.so über JNI zu nutzen und hätte da mal ein paar Grundsätzliche Fragen.
    Wenn ich über JNI meine selbstgeschriebenen C-Programme in Java nutzen will klappt alles wunderbar.
    Ich gebe in Java die Methoden die ich aus dem C Programm nutzen will mit native bekannt,
    lasse mit javah daraus die Headerdatei generieren und lade die lib die ich vorher aus meinem C Programm erstellt habe.
    Die lib erstelle ich indem ich dem C Compiler meine von Java erstellte Headerdatei in Verbindung bringe mit dem C Programm.
    Soweit Sogut …

    Ich verstehe nun nicht wirklich wie ich eine bereits existierende lib mit JNI nutzen könnte, die ich nicht selbst Kompiliert habe?
    Muss ich hier den C++ Code neu verpacken und selber die libXXX.so erzeugen?
    Oder ist das der fa
    lsche Ansatz und ich kann die bestehende lib nutzen indem ich zum Beispiel ein C/C++ Programm schreibe welches die eigentliche Lib nutzt und meine C/C++ Implementierung ist nur das Interface welches Daten hin und her schubst und castet.

    Bin relativ unerfahren in C und C++, bitte berücksichtigen beim Antworten, Danke )

  • #2
    Du kannst mit System.loadLibrary jede DLL laden, solange du die Funktionen usw. in der DLL kennst
    Christian

    Comment


    • DeBubchie
      DeBubchie commented
      Editing a comment
      Das bedeutet wenn ich eine libXXX.so habe das darin alles nötige verpackt ist um diese Funktionalitäten zu nutzen selbst wenn diese mit shared erzeugt wurde? ... oder trifft das nur auf static libraries zu? Kann ich sehen ob die lib shared oder static ist?

      Ich nehme also die bestehende libXXX.so deren Funktionsdefinitionen ich kenne lade diese und deklariere nur auf Javaseite die Funktionen mit native und kann diese über JNI nutzen? Muss ich dann überhaupt noch eine Headerdatei mit javah generieren?

      JNI ist mir solang klar solange ich die Java und C Dateien mit der mit javah erstellten Headerdatei mit dem C Programm verbinde. Hier habe ich jetzt aber eine bestehende API die bereits einen lib anbietet. Meine Frage ist eigentlich wie binde ich eine bestehende C++API inform einer lib (dll auf Windows oder lib.so auf Linux) mit JNI ein.
      Ich habe auch die Sourcen in C++ allerdings dachte ich das ich einfach die bestehende lib.so nutzen kann.

  • #3
    Wenn du einen Kommentar schreibst, bekommt man nicht mit, das du geantwortet hast.
    Unter Libs werden DLLs verstanden. Ein API ist ein Interface (Application Programm Interface). Du musst dann schon sagen, was das ist

    Ansonsten liegen meine C/C++ Erfahrungen zu lange zurück
    DLL mit Java

    https://www.google.com/search?client...sclient=psy-ab

    Christian

    Comment

    Working...
    X