JAVA加载外部资源库

来源:互联网 发布:天天pk10计划软件 编辑:程序博客网 时间:2024/05/01 09:00

在java代码中加载动态资源库时,JNI需要使用System.load/System.loadLibrary其中的一个方法来加载库文件
。JNA使用Native.loadLibrary

System.load:可以指定任意路径,但是必须是文件绝对路径System.load("C:\\Documents and Settings\\TestJNI.dll"); //WindowsSystem.load("/usr/lib/TestJNI.so");

//Linux
要载入的库文件静态链接到其它动态链接库,如TestJNI.dll 静态链接到dependency.dll,必须注意:如果你选择System.load(“D:\lib\TestJNI.dll”);那么即使你把dependency.dll同样放在D:\lib下,load还是会因为找不到依赖的dll而失败。
因为jvm在载入TestJNI.dll会先去载入TestJNI.dll所依赖的库文件dependency.dll,而dependency.dll并不位于java.library.path所指定的目录下,所以jvm找不到dependency.dll。
你有两个方法解决这个问题:

一是把D:\\lib加入到java.library.path的路径中。二是先调用System.load("D:\\lib\\dependency.dll"); 让jvm先载入dependency.dll,然后再调用System.load("D:\\lib\\TestJNI.dll");System.loadLibrary: 参数为库文件名,不包含库文件的扩展名。那么你只要把dependency.dll放在任何java.library.path包含的路径中即可。
1 0
原创粉丝点击