java loadlibrary濡備綍浣跨敤
Java涓殑loadLibrary
鏂规硶鐢ㄤ簬鍔犺浇鍔ㄦ€侀摼鎺ュ簱锛圖LL銆丼O绛夛級鏂囦欢銆備互涓嬫槸浣跨敤loadLibrary
鏂规硶鐨勬楠わ細
-
鍒涘缓涓€涓狫ava绫伙紝渚嬪
LibraryLoader
銆?/p> -
鍦ㄨ绫讳腑澹版槑涓€涓湰鍦版柟娉曪紝璇ユ湰鍦版柟娉曠敤浜庡姞杞藉姩鎬侀摼鎺ュ簱銆備緥濡傦細
public class LibraryLoader {
public static native void loadLibrary(String libraryName);
}
- 鍦↗ava绫讳腑浣跨敤
System.loadLibrary()
鏂规硶鏉ュ姞杞芥湰鍦版柟娉曘€備緥濡傦細
public class Main {
public static void main(String[] args) {
System.loadLibrary("myLibrary");
}
}
-
浣跨敤
javac
鍛戒护缂栬瘧Java绫伙細javac LibraryLoader.java
-
浣跨敤
javah
鍛戒护鐢熸垚C/C++澶存枃浠讹細javah -jni LibraryLoader
-
鍦ㄧ敓鎴愮殑澶存枃浠朵腑瀹炵幇鏈湴鏂规硶锛屽姞杞藉姩鎬侀摼鎺ュ簱銆備緥濡傦紝瀵瑰簲涓婇潰鐨勪緥瀛愶紝鐢熸垚鐨勫ご鏂囦欢涓彲浠ユ坊鍔犱互涓嬩唬鐮侊細
#include <jni.h>
#include <stdio.h>
#include "LibraryLoader.h"
JNIEXPORT void JNICALL Java_LibraryLoader_loadLibrary(JNIEnv *env, jclass cls, jstring libraryName) {
const char *name = (*env)->GetStringUTFChars(env, libraryName, NULL);
// 鍔犺浇鍔ㄦ€侀摼鎺ュ簱
if (name != NULL) {
printf("Loading library: %s\n", name);
// 鍔犺浇鍔ㄦ€侀摼鎺ュ簱鐨勪唬鐮?/span>
(*env)->ReleaseStringUTFChars(env, libraryName, name);
}
}
- 浣跨敤C/C++缂栬瘧鍣ㄧ紪璇戠敓鎴愮殑澶存枃浠跺拰瀹炵幇鏂囦欢锛岀敓鎴愬姩鎬侀摼鎺ュ簱鏂囦欢銆備緥濡傦紝瀵瑰簲涓婇潰鐨勪緥瀛愶紝鍙互浣跨敤浠ヤ笅鍛戒护缂栬瘧鐢熸垚鍔ㄦ€侀摼鎺ュ簱鏂囦欢锛?/li>
- Windows锛?/li>
gcc -shared -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" LibraryLoader.c -o myLibrary.dll
- Linux锛?/li>
gcc -shared -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux" LibraryLoader.c -o libmyLibrary.so
- 杩愯Java绋嬪簭锛屽嵆鍙€氳繃
loadLibrary
鏂规硶鍔犺浇鍔ㄦ€侀摼鎺ュ簱銆?/li>