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

C 專案封裝 DLL 供 Java JNI 呼叫完整流程

     編輯:程式設計綜合問答

將完整功能的 C 專案編譯為動態連結庫(Windows `.dll` / Linux `.so`),再由 Java 透過 JNI 呼叫。

核心步驟

  1. C 端導出函式:使用 __declspec(dllexport) (Windows) 或預設可見性,定義 JNIEXPORT 規範的函式簽名。
    // MyLib.h
    #ifdef _WIN32
    #define DLL_EXPORT __declspec(dllexport)
    #else
    #define DLL_EXPORT
    #endif
    DLL_EXPORT jint Java_com_example_MyClass_myMethod(JNIEnv*, jobject, jint);
  2. 編譯產出共享庫:
    • Windows (MSVC):cl /LD MyLib.c /I"%JAVA_HOME%\include" /I"%JAVA_HOME%\include\win32" /FeMyLib.dll
    • Linux (GCC):gcc -shared -fPIC -I$JAVA_HOME/include -I$JAVA_HOME/include/linux MyLib.c -o libMyLib.so
  3. Java 端載入庫:
    static { System.loadLibrary("MyLib"); } // 無前綴 lib、無副檔名
    public native int myMethod(int param);
    
  4. 運行時庫路徑:Windows 放在 `java.library.path` 或 `PATH` 目錄;Linux 放在 `LD_LIBRARY_PATH` 或 `/usr/lib`。

建議:先用簡單的「傳入整數、回傳平方」驗證流程,再遷移複雜邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved