国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

JAVA JNI原理詳細介紹及簡單實例代碼

2019-11-26 13:26:07
字體:
來源:轉載
供稿:網友

JAVA JNI原理

JNI是JAVA標準平臺中的一個重要功能,它彌補了JAVA的與平臺無關這一重大優點的不足,在JAVA實現跨平臺的同時,也能與其它語言(如C、C++)的動態庫進行交互,給其它語言發揮優勢的機會。

有了JAVA標準平臺的支持,使JNI模式更加易于實現和使用。在此總結了下面這個知識圖:

實例:

環境說明:ubuntu 10.4.2 LTS系統

程序清單1:src/com/magc/jni/HelloWorld.java

 /**  *   */  package 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++程序來引用并實現其中的函數

程序清單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 * Method:  DisplayHello * Signature: ()V */ JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello  (JNIEnv *, jobject);  #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 *env, jobject obj){  printf("From jni_helloworldImpl.cpp :");  printf("Hello world ! /n");  return;}

此C++文件實現了上述頭文件中的函數,注意方法函數名要保持一致。
編譯生成動態庫libHello.so,

命令:g++ -shared -I /usr/lib/jvm/java-6-openjdk/include jni_helloworldImpl.cpp -o libHello.so

成功后,便會在當前目錄下生成動態鏈接庫libHello.so文件。

有了具體實現的動態庫后,就可以運行JAVA調用JNI程序類的native方法了,

命令:java -Djava.library.path=. com.magc.jni.HelloWorld

輸入結果即為:From jni_helloworldImpl.cpp :Hello world !

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 外汇| 香格里拉县| 周至县| 且末县| 响水县| 星子县| 秀山| 玉环县| 南汇区| 偏关县| 甘谷县| 江陵县| 凤凰县| 昭通市| 乃东县| 饶阳县| 米林县| 扎赉特旗| 福清市| 兴国县| 嘉兴市| 通渭县| 蒲江县| 黑水县| 洛南县| 同仁县| 胶州市| 体育| 新和县| 托克托县| 平原县| 双辽市| 乌兰县| 富川| 广河县| 嘉义县| 布拖县| 张家口市| 庄浪县| 开封县| 韶关市|