Java Jni -Prinzip
JNI ist eine wichtige Funktion in der Java -Standardplattform. Es macht die Mängel von Javas wichtigem Vorteil von plattformunabhängigem. Während Java plattformübergreifend ist, kann es auch mit dynamischen Bibliotheken anderer Sprachen (wie C und C ++) interagieren und anderen Sprachen die Möglichkeit geben, ihre Vorteile zu spielen.
Mit der Unterstützung der Java -Standardplattform ist der JNI -Modus einfacher zu implementieren und zu verwenden. Hier finden Sie eine Zusammenfassung des folgenden Wissensgraphen:
Beispiel:
Umgebung Beschreibung: Ubuntu 10.4.2 LTS -System
Programmliste 1: src/com/magc/jni/helloWorld.java
/ ** * */ package com.magc.jni; / ** * @Author Magc * * */ public class helloWorld {static {System.loadlibrary ("Hallo"); } public native void displayHello (); / ** * @param args */ public static void main (String [] args) {new HelloWorld (). displayHello (); }} Geben Sie das SRC -Verzeichnis ein und kompilieren Sie die Java -Klasse.
Befehl: javac ./com/magc/jni/Helloworld.java
Generieren Sie HelloWorld.class im Verzeichnis, in dem sich HelloWorld.java befindet
Verwenden Sie dann Javah, um die Header -Datei zu generieren.
Befehl: javah -jni com.magc.jni.hallld
Generieren Sie die Header -Datei com_magc_jni_helloworld.h im aktuellen Verzeichnis. Diese Datei wird von C- und C ++ - Programmen verwendet, um Funktionen darin zu referenzieren und zu implementieren.
Programmliste 2: com_magc_jni_helloworld.h
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_magc_jni_HelloWorld */ #ifndef _Included_com_magc_jni_HelloWorld #define _Included_com_magc_jni_HelloWorld #ifdef __cplusplus extern "C" { #endif / * * class: com_magc_jni_helloworld * methode: displayHello * Signatur: () v * / jniexport void jnicall java_com_magc_jni_helloworld_displayhello (jnienv *, Job); #ifdef __cplusplus} #endif #endif Hinweis: 1) Diese Header -Datei erfordert keine Benutzerkompilierung und wird direkt zur Referenz durch andere C- und C ++ - Programme verwendet.
2) Die Methode java_com_magc_jni_helloworld_displayhello (jnienv *, Jobject) in dieser Header -Datei ist eine Schnittstelle zur Interaktion mit dynamischen Linkbibliotheken in der Zukunft und der Name muss konsistent sein.
Listing 3 des Programms: src/jni_helloworldimpl.cpp
#include <jni.h>#include "com_magc_jni_HelloWorld.h"#include <stdio.h>JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello(JNIEnv *env, job obj){ printf("From jni_helloworldImpl.cpp :"); printf ("Hallo Welt! /n"); zurückkehren;} Diese C ++ - Datei implementiert die Funktionen in der obigen Header -Datei. Bitte beachten Sie, dass die Namensnamen der Methode konsistent sein müssen.
Dynamische Bibliothek libhello.so zusammenstellen und generieren,
Befehl: g ++ -Shared -i/usr/lib/jvm/java -6 -openjdk/include jni_helloworldimpl.cpp -o libhello.so
Nach dem Erfolg wird die dynamische Linkbibliothek libhello.so -Datei im aktuellen Verzeichnis generiert.
Mit der dynamischen Bibliothek spezifischer Implementierungen können Sie Java ausführen, um die native Methode der JNI -Programmklasse aufzurufen.
Befehl: java -djava.library.Path =. com.magc.jni.Helloworld
Das Eingabeergebnis lautet: Von jni_helloworldimpl.cpp: Hello World!
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!