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語言實現:
檔案列表:
參考:
相關文章
- java呼叫c++動態庫之jni呼叫JavaC++
- C#呼叫C++動態連結庫C#C++
- lua——alien庫實現lua呼叫C動態連結庫(dll、so)
- P/Invoke之C#呼叫動態連結庫DLLC#
- JNI程式碼實踐
- C程式函式呼叫&系統呼叫C程式函式
- C++庫封裝JNI介面——實現java呼叫c++C++封裝Java
- JNI:Java程式碼呼叫原生程式碼Java
- 動態連結庫與靜態連結庫
- Android JNI實現Java與C/C++互相呼叫,以及so庫的生成和呼叫(JNI方式呼叫美圖秀秀so)AndroidJavaC++
- java動態呼叫c++庫JavaC++
- cmake 連結動態連結庫
- C#呼叫IronPython動態執行Python程式碼C#Python
- 動態連結串列的建立(程式碼)
- C++呼叫C#的動態庫dllC++C#
- STM32呼叫C庫自帶函式函式
- Java如何呼叫C語言程式,JNI技術JavaC語言
- linux 動態庫 靜態庫 函式覆蓋Linux函式
- 安卓動態連結庫檔案體積最佳化探索實踐安卓
- 迴圈單連結串列建構函式、解構函式C++實現函式C++
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- linux下靜態連結庫和動態連結庫的區別有哪些Linux
- C語言函式呼叫棧C語言函式
- Android JNI 程式碼自動生成Android
- PostgreSql擴充套件Sql-動態載入共享庫(C函式)SQL套件函式
- windows和linux gcc生成動態連結庫DLL和SO並用python呼叫WindowsLinuxGCPython
- Android:JNI與NDK(二)交叉編譯與動態庫,靜態庫Android編譯
- VS(visual studio) C++ 封裝dll,以及其隱式呼叫與顯式呼叫(靜態動態)C++封裝
- linux下使用boost.python呼叫c++動態庫LinuxPythonC++
- 【連結 1】與靜態連結庫連結
- 核心函式 系統呼叫 系統命令 庫函式函式
- C 庫函式 - strstr()函式
- js 使用 DotNetObjectReference 呼叫 c# 函式JSObjectC#函式
- C++如何解析函式呼叫C++函式
- C++中函式呼叫的用法C++函式
- C++靜態函式C++函式
- 動態連結庫的生成和使用(二)
- 載入動態連結庫——dlopen dlsym dlclose