Java JNI原則
JNIは、Java標準プラットフォームの重要な機能です。これは、プラットフォームに依存しないというJavaの重要な利点の欠点を補います。 Javaはクロスプラットフォームですが、他の言語(CやC ++など)の動的ライブラリと対話することもでき、他の言語に利点をプレイする機会を与えます。
Java標準プラットフォームのサポートにより、JNIモードは実装と使用が容易になります。次の知識グラフの要約は次のとおりです。
例:
環境説明:Ubuntu 10.4.2 LTSシステム
プログラムリスト1:SRC/COM/MAGC/JNI/HELLOWORLD.JAVA
/ ** * */パッケージcom.magc.jni; / ** * @author magc * */ public class helloworld {static {system.loadLibrary( "hello"); } public Native void displayhello(); / ** * @param args */ public static void main(string [] args){new helloworld()。displayhello(); }} SRCディレクトリを入力し、Javaクラスをコンパイルします。
コマンド:javac ./com/magc/jni/helloworld.java
Helloworld.javaがあるディレクトリでHelloworld.classを生成します
次に、Javahを使用してヘッダーファイルを生成します。
コマンド:Javah -jni com.magc.jni.helloworld
現在のディレクトリにcom_magc_jni_helloworld.hヘッダーファイルを生成します。このファイルは、CおよびC ++プログラムによって使用され、ITに関数を参照および実装します。
プログラムリスト2:com_magc_jni_helloworld.h
/ *このファイルを編集しないでください - それはマシン生成されたマシンです */ #include <jni.h>/ *クラスcom_magc_jni_hellowld */ #ifndef _included_com_magc_jni_helloworld #define _included_com_magc_jni_hhini_hhi_hhi_hhi_hhi_hhi_hhi_hhi_hhi_hhi_hhi_hhi_heallld / * *クラス:com_magc_jni_helloworld *メソッド:displayhello *署名:()v * / jniexport void jnicall java_com_magc_jni_helloworld_displayhello(jnienv *、job); #ifdef __cplusplus} #endif #endif
注:1)このヘッダーファイルはユーザーコンパイルを必要とせず、他のCおよびC ++プログラムによる参照に直接使用されます。
2)java_com_magc_jni_helloworld_displayhello(jnienv *、jobject)メソッドこのヘッダーファイルのメソッドは、将来的に動的リンクライブラリと対話するためのインターフェイスであり、名前は一貫している必要があります。
プログラムの3つのリスト: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 *) printf( "hello world! /n");戻る;}
このC ++ファイルは、上記のヘッダーファイルの関数を実装しています。メソッド関数名は一貫している必要があることに注意してください。
ダイナミックライブラリlibhello.soをコンパイルして生成します。
コマンド:g ++ -shared -i/usr/lib/jvm/java -6 -openjdk/include jni_helloworldimpl.cpp -o libhello.so
成功後、Dynamic Link Library Libhello.SOファイルが現在のディレクトリで生成されます。
特定の実装の動的ライブラリを使用すると、JAVAを実行してJNIプログラムクラスのネイティブメソッドを呼び出すことができます。
コマンド:java -djava.library.path =。 com.magc.jni.helloworld
入力の結果は、jni_helloworldimpl.cppから:Hello World!
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!