其中涉及的測試源碼如下:
For those who didn't install Java with default settings, a systematic way for solving JNI class path problem is:
1> include "System.out.println(System.getProperty("Java.library.path")); " in your "static" block, right before loading the class.
2> run your program and not surprisingly you got the err again, but this time with java.library.path info for your system. (it's important since this path name varies among systems).
3> cp your libxxx.so into the java.library.path
Java一般使用兩個path:classpath 和 java.library.path
classpath是指向jar包的位置
java.library.path是非java類包的位置如(dll,so)
解決辦法:
第一種方法,在代碼里設置環境變量
第二種方法:執行時在vm arguments里添加-Djava.library.path= /usr/local/lib,例如java -Djava.library.path=. xxx(xxx是某個類文件的名字,不包括后綴)
第三種方法:設置環境變量java.library.path
1:Linux下的系統變量LD_LIBRARY_PATH來添加java.library.path
2:Windows下設置哪個環境變量???????????????????
如果你上面看不懂的話就繼續向下面看:
1、 在你載入jni類之前 放入“System.out.println( System.getProperty("java.library.path"));
2、運行你的程序你將獲得java.library.path指向的目錄
3、拷貝你的libxxx.so到java.library.path指向的某個目錄下面。
注意:
Linux下:一定要將Linux下的共享庫(我暫且這么叫:)命名成libxxx.so的形式,"xxx"是你在System.loadLibrary("xxx")中用到的加載庫名稱。
Windows下:一定要將Windows下的共享庫(我暫且這么叫:)命名成xxx.dll的形式(沒有前邊的lib三個字母),"xxx"是你在System.loadLibrary("xxx")中用到的加載庫名稱。
查了其他的資料:
也可以通過設置LINUX下的系統變量LD_LIBRARY_PATH來添加java.library.path,只要在啟動~/.bashrc中添加如下代碼然后重新登錄shell,就可以將動態庫放在當前目錄下運行你的jni程序了。
export LD_LIBRARY_PATH=.:..:$LD_LIBRARY_PATH
另外也可以通過如下I'm new to JNI. I see there are several ways to set JVM to look for libraries dll, so, etc.
System.setProperty("java.library.path", ".");
System.loadLibrary("hello");
That's when UnsatisfiedLinkError
java.lang.UnsatisfiedLinkError: no hello in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
at java.lang.Runtime.loadLibrary0(Runtime.java:822)
at java.lang.System.loadLibrary(System.java:992)
at HelloWorld.main(HelloWorld.java:17)
