Linux平臺Java調用so庫-JNI使用例子
首先,編寫一個Java文件,包含有native方法
public class MyJni { public native void display();public native double sum(double x, double y); public static void main(String[] args) { }
}</pre> 其次,將此Java文件編譯成.h文件
javah MyJni執行完此命令,會在目錄下生產一個MyJni.h文件
第三,編寫一個.c文件,引入剛才的頭文件
#include <jni.h>include "MyJni.h"
include <stdio.h>
JNIEXPORT void JNICALL Java_MyJni_display(JNIEnv *env,jobject obj){
printf("Hello JNI"); return;
}
JNIEXPORT jdouble JNICALL Java_MyJni_sum(JNIEnv *env,jobject obj,jdouble a,jdouble b){
return a+b;
}</pre> 第四,將.c文件編譯成.o,再重新轉換成.so或者.dll文件
gcc -fPIC -D_REENTRANT -I JDK路徑/jdk1.8/include -I JDK路徑/jdk1.8/include/linux -c MyJni.c上面的命令會將C文件編譯成.o文件。gcc -shared Test.o -o libtest.so上面的命令就能將.o文件編譯成.so文件了。
在剛才的java方法中測試一下
public class MyJni {static { System.load("絕對路徑/libtest.so"); } //使用jni的關鍵字native //這個關鍵字決定我們那些方法能夠在C文件使用 //只須聲明,不必實現 public native void display(); public native double sum(double x, double y); public static void main(String[] args) { MyJni myJni = new MyJni(); System.out.print(myJni.sum(1, 1)); System.out.print("\n"); myJni.display(); }
}</pre>
來自:http://my.oschina.net/simaben/blog/322850
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!