一、操作步驟簡述
- 搭建java環境、GCC環境
- 編寫Java文件
- 生成JNI頭文件
- 編寫C文件並把C庫編譯成dll(或so)文件
- 運行
二、遇到的錯誤彙總
2.1 javah一直不成功
先在底部的端口跳轉到src目錄,然後執行以下代碼,搞定
javah -d ./jni org.minilzo.common.MiniLzoJNI
//-d 是創建文件夾
2.2 生成dll文件報錯 error: parameter name omitted
gcc -Wl,--add-stdcall-alias -I"C:\Program Files\Java\jdk1.8.0_191\include" -I"C:\Program Files\Java\jdk1.8.0_191\include\win32" -shared -o ./dll/MiniLzoJNI64.dll ./jni/MiniLzoJNI.c
報錯error: parameter name omitted,是因爲直接複製了頭文件的函數,沒添加參數,後來代碼改了下,搞定
//.h文件中定義
JNIEXPORT void JNICALL Java_org_minilzo_common_MiniLzoJNI_sayHello
(JNIEnv *, jobject);
//.c文件中實現
JNIEXPORT void JNICALL Java_org_minilzo_common_MiniLzoJNI_sayHello(JNIEnv *env, jobject thisObj)
{
printf("Hello World!\n");
return;
}
參考資料:
IntelliJ IDEA平臺下JNI編程(一)—HelloWorld篇