- 1.这两个函数实现通过指定的路径载入和链接动态库,比如在JNI中想载入C,C++编译生成的*.dll文件。
- 2.public static void load (String pathName)函数中,参数pathName是绝对路径,例如:System.load("E:/test.dll"); 后缀名不可少。
- 3.public static void loadLibrary (String libName),参数是动态库的名称,没有后缀,系统自动判断。那么库文件应该放在哪里呢。
- 应该放在java.library.path这一jvm变量所指向的路径中。
- 可以通过:System.getProperty("java.library.path");得到这个路径。也可以放在程序当前目录,可以通过:System.getProperty("user.dir");获得程序当前目录。
- 你也可以设定java.library.path这一jvm变量:
- 右键你的java工程,properties -> Java Build Path -> Source -> Native library location -> Edit ,设定成你想要的路径,再把库文件拷到里面就OK了,当然对于加载的动态库,也只能放到这个路径里了。也可以右键src,设定其属性的Native Library,两者设定的是同一个变量。
- 4.如果你要载入的库文件静态链接到其它动态链接库,例如TestJNI.dll 静态链接到dependency.dll,应当注意:
- 因为jvm在载入TestJNI.dll会先去载入TestJNI.dll所依赖的库文件dependency.dll,如果都使用System.load来载入,那么先载入dependency.dll,再载入TestJNI.dll。
- 总结:建议使用System.loadLibrary,并且自己设定java.library.path。
- 参考:http://blog.youkuaiyun.com/forandever/article/details/5983846