JNI呼叫c動態連結庫函式程式碼實踐
使用裝置:macOS-10.15
jni呼叫c實踐大體流程:
1、>javac HelloWorld.java,生成HelloWorld.class檔案。
2、>javah HelloWorld,生成HelloWorld.h標頭檔案。
3、建立HelloWorld.c檔案來實現HelloWorld.h標頭檔案;
4、從jdk/include目錄拷貝jni.h、jni_md.h、jawt_md.h等標頭檔案到HelloWorld.c同級目錄,且.h檔案中依賴不要用尖括號,如#include "jni.h"。
5、>gcc helloWorld.c -fPIC -shared -o hello.so,編譯HelloWorld.c檔案生成.so檔案;
6、在java應用中呼叫動態連結函式:在HelloWorld中增加main函式,靜態載入.so庫,然後呼叫HelloWorld類中的方法;
Java呼叫c程式碼實現的動態連結函式庫:
public class helloWorld{
/**
* 定義需要在動態連結庫中實現的方法
*/
public static native void helloWorld();
public static native void test_a();
static{
// 必須是動態函式庫檔案的絕對路徑
System.load("/Users/eason/Documents/code-hub/jdk-study/vimCodes/jniTest/hello.so");
// libtest.so函式庫中包含test_a、test_b等函式,
System.load("/Users/eason/Documents/code-hub/jdk-study/vimCodes/jniTest/libtest.so");
}
public static void main(String[] args){
helloWorld h = new helloWorld();
h.helloWorld();
// java.lang.UnsatisfiedLinkError
// h.test_a();
}
}
HelloWorld的c語言實現:
檔案列表:
參考:
相關文章
- C#呼叫C++動態連結庫C#C++
- VB呼叫C程式的方法—動態連結庫法 (轉)C程式
- lua——alien庫實現lua呼叫C動態連結庫(dll、so)
- Java呼叫C/C++編寫的第三方dll動態連結庫(非nativeAPI)—JNIJavaC++API
- P/Invoke之C#呼叫動態連結庫DLLC#
- golang可以呼叫C++的動態連結庫麼GolangC++
- Java呼叫C/C++編寫的第三方dll動態連結庫(非native API)--- JNIJavaC++API
- Jni函式的靜態繫結函式
- JNI程式碼實踐
- C++原始碼免殺之函式的動態呼叫C++原始碼函式
- oracle呼叫C動態庫Oracle
- 動態連結庫與靜態連結庫
- C++庫封裝JNI介面——實現java呼叫c++C++封裝Java
- JNI:Java程式碼呼叫原生程式碼Java
- 簡單實現Android NDK編譯jni呼叫動態庫開發Android編譯
- 【PB】powerbuilder呼叫VC編寫的動態連結庫UI
- JNI原始碼分析(並實現JNI動態註冊)原始碼
- java動態呼叫c++庫JavaC++
- cmake 連結動態連結庫
- 在PowerBuilder中動態呼叫函式UI函式
- android使用JNI呼叫C,C++程式AndroidC++
- C#程式碼與javaScript函式的相互呼叫C#JavaScript函式
- 深入理解C語言----動態庫 & 靜態庫 & 連結C語言
- Android JNI實現Java與C/C++互相呼叫,以及so庫的生成和呼叫(JNI方式呼叫美圖秀秀so)AndroidJavaC++
- C語言動態呼叫庫(轉)C語言
- 動態連結串列的建立(程式碼)
- 動態呼叫python類和函式Python函式
- 動態連結庫和靜態連結庫的區別
- 動態連結庫(DLL)
- 動態連結庫(轉)
- 安卓動態連結庫檔案體積最佳化探索實踐安卓
- C++呼叫C#的動態庫dllC++C#
- js動態連結<a>元素程式碼例項JS
- VB動態呼叫外部函式的方法 (轉)函式
- STM32呼叫C庫自帶函式函式
- C語言中庫函式呼叫幾例(轉)C語言函式
- C#動態執行函式:利用反射實現C#函式反射
- Java如何呼叫C語言程式,JNI技術JavaC語言