JNI教程——java如何調用C庫

一、操作步驟簡述

  1. 搭建java環境、GCC環境
  2. 編寫Java文件
  3. 生成JNI頭文件
  4. 編寫C文件並把C庫編譯成dll(或so)文件
  5. 運行

二、遇到的錯誤彙總

2.1 javah一直不成功

image
先在底部的端口跳轉到src目錄,然後執行以下代碼,搞定

javah -d ./jni  org.minilzo.common.MiniLzoJNI
//-d 是創建文件夾

image

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篇

使用javah到處類的頭文件時常見錯誤:找不到android.app.Activity的類文件

java和C的類型轉換

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