JNI 小結

最近學習 JNI,先把目前的理解 Note 下來,後面再慢慢修改,如果不對的地方,請指出,3Q

 

JNI 介紹就不說了,直接進入應用方法,這裏說的是 Java 引用 C++ 接口:(目前看到兩種)

這裏只 Note :從 Java 需要的接口,到 C++ 生成相應的 .so 的過程。

1.這第一種方法最大的特點是:C++的函數名由 Java 的文件編譯決定,而且 C++ 文件要引用 Java 生成的 .h 文件。

   這種方法在 Windows 和 Linux 中都有看到(因爲第二種方法,現在只在 Linux 中看到使用,還沒驗證 Win32 上的情況),過程爲:

   生成 .so 的過程: 

   (1) 先把 Java 需要調用的接口在 .java  文件裏寫出來。函數使用 native 關鍵字 

         如 public native static void set(int i);  後面應用時,Java 程序調用 C++ 的功能就是通過這個接口。

   (2) 調用 javac 命令,編譯這個文件生成 class,  然後調用 javah 命令,生成 .h 文件。

         這個文件裏定義了 C++ 中與 .java 中接口 set 對應的函數的函數名,以及參數。如下:

         JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint);

   (3) 下面要做的就是編寫 .cpp 實現 這個 .h 文件中的接口。然後編程生成 .so

 

2.第二種方法的特點是:實現功能的 C++ 函數名可以任意定義,只要把它與 Java 的接口一一對應就可以,當然這樣 Java 也就不需要生成 .h 供 C++ 來應用了(目前這種方法只在 Linux 上看到,Win32 上沒驗證)。下面就進入過程說明(生成 .so 的過程全在 C++ 中,不要 Java 參與,只需要知道 Java 需要的接口函數就可以了):

    (1)當然開始還是要 Java 寫出需要的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章