0%

JNI Tutorial

記錄一下JNI的建立跟使用方法,在Linux底下驗證成功。
以下是一個簡單的範例

裡面做的事情很簡單,載入Shared Object,呼叫 Native Code。

第一步: 接著編譯 Java Code 產生 class 檔

1
$ javac HelloWorld.java

第二步: 產生 HelloWorld.h Header File

1
$ javah -jni HelloWorld.

產生出來的 Header File長這個樣子

第三步: 撰寫對應的Native Code
做的事情也很簡單,就是印出Hello World而已

第四步: 產生 Shared Object

1
$ gcc -I"/usr/lib/jvm/java-7-openjdk-amd64/include" -fPIC -shared -o libHelloWorld.so HelloWorld.c

此時libHelloWorld.so會跟HelloWorld.class在同一個目錄中
第五步: 執行,將LibraryPath指向當前目錄

java -Djava.library.path=pwd HelloWorld

可以看到正確的結果。

之前是介紹如何從 Java 呼叫 C++ 的 Native Code,現在要說的是如何從C++建立 Java Virtual Machine,進而執行 Java Code。

第一步: 寫好Java Code且編譯
這裡準備的 Java Code

編譯它

1
$ javac HelloWorld.java

第二步:撰寫C++的程式碼且編譯

編譯它

1
$ g++ -I"/usr/lib/jvm/java-7-openjdk-amd64/include"  -L"/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server" Hello.cpp -ljvm -o Hello

第三歩: 設定 LD_LIBRARY_PATH

1
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server

第四歩: 執行程式

1
$ ./Hello