Linux平臺Java調用so庫-JNI使用例子

jopen 10年前發布 | 31K 次閱讀 Linux Java開發

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