2019年4月1日 星期一

java 透過 jni 呼叫 C

1. 首先建個資料夾,裡面新增一個java檔案


class helloworld {
    private native void print();
    public static void main(String[] args) {
        new helloworld().print();
    }
    static {
        System.loadLibrary("helloworld");
    }
}



2. 打開cmd,利用javah產生header檔


 // 因為我的jdk是10,把javah拿掉了 所以這樣使用 ,10以前 javah -jni xxxx
 javac -h . helloworld.java



3. 產生header檔之後,打開來看,會發現有一段 JNIEXPORT void JNICALL Java_helloworld_print
(JNIEnv *, jobject);
這個就是要寫在C++裡面的方法,供java呼叫

新增 helloworld.cpp


#include 
#include 
#include "helloworld.h"

JNIEXPORT void JNICALL
Java_helloworld_print(JNIEnv *env, jobject obj)
{
    printf("哈囉哈囉世界!\n");
    return;
}



4. 下載mingw64 (連結)

載完安裝後,打開cmd,輸入 gcc 看有沒有指令,沒有的話要自己新增環境變數
gcc路徑 : C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin (不一樣的話要改)



5. 打開cmd 輸入指令 ,輸出dll檔

gcc -I "C:\Program Files\Java\jdk-10.0.2\include" -I "C:\Program Files\Java\jdk-10.0.2\include\win32" -shared -o helloworld.dll helloworld.cpp



6. class檔和dll檔放在同一個目錄下, cmd輸入 java helloworld 即可成功從java呼叫使用c方法






使用gcc編譯C語言




Source Code : https://github.com/tks3589/BloggerCode/tree/master/java/jjj







沒有留言:

張貼留言