,如果你有這樣的:
root:
main.jar
libjni.jnilib
你運行你在根目錄下的代碼,使用命令,如:
java -jar main.jar
在這種情況下,你的加載代碼應該是這樣的:
System.load("libjni.jnilib");
但是bot的System.loadLibrary(),加載比loadLibrary安全。
建議將jni庫的絕對路徑傳遞給System.load。
我用這樣的事情在我的項目:
/**
* To load the JNI library
* Created by ice1000 on 2017/1/6.
*
* @author ice1000
*/
@SuppressWarnings("WeakerAccess")
public final class Loader {
public final static String JNI_LIB_NAME;
private static boolean loaded = false;
/*
* maybe it's already loaded, so there should be a check
*/
static {
JNI_LIB_NAME = "libjni";
loadJni();
}
@NotNull
@Contract(pure = true)
private static String libraryName(@NonNls @NotNull String libName) {
String ___ = System.getProperty("os.name");
String fileName;
if (___.contains("Linux"))
fileName = libName + ".so";
else if (___.contains("Windows"))
fileName = libName + ".dll";
else // if (___.get("OSX"))
fileName = libName + ".dylib";
// else fileName = libName;
return new File(fileName).getAbsolutePath();
}
public static void loadJni() {
if (!loaded) {
System.load(libraryName(JNI_LIB_NAME));
loaded = true;
}
}
}
,這裏是我的工作目錄:
root:
javaClasses.jar
libjni.dll
libjni.so
libjni.dylib
希望這可以幫助你。