首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

JNI開發必備:javah 生成 C/C++ 標頭檔與存根完整指南

     編輯:J2EE

`javah`(JDK 8 及之前)從編譯後的類別生成 JNI 所需的 C 標頭檔(`.h`)與存根檔(`.c`),供原生方法實現調用。JDK 9+ 改用 `javac -h` 直接生成。

傳統 javah 用法 (JDK 8-)

# 生成標頭檔到指定目錄
javah -d jni/include -classpath build/classes com.example.NativeDemo

# 生成存根檔(含 JNI 函數骨架)
javah -stubs -d jni/src com.example.NativeDemo

現代 javac -h 用法 (JDK 9+)

javac -h jni/include -d build/classes src/com/example/NativeDemo.java

關鍵選項

選項說明
-d <目錄>輸出目錄
-o <檔案>合併輸出單一檔案
-stubs生成存根而非標頭檔
-classpath類別搜尋路徑
-verbose顯示處理進度

生成的標頭檔關鍵內容

  • JNI 函數簽章:`JNIEXPORT jint JNICALL Java_com_example_NativeDemo_add(JNIEnv*, jobject, jint, jint)`
  • 欄位/方法 ID 獲取宏:`GetFieldID`、`GetMethodID`
  • 類別引用:`jclass`、全域/局部引用管理

JNI 開發提醒

  • 嚴格區分局部/全域引用,避免記憶體洩漏
  • 檢查例外:`(*env)->ExceptionCheck(env)`
  • 效能敏感路徑考慮 `GetPrimitiveArrayCritical` / `ReleasePrimitiveArrayCritical`
  • 建構系統建議使用 CMake + `add_library(... SHARED)` 跨平台建構
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved