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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!