java.lang.UnsatisfiedLinkError: Can not load XXX library ... JNA不能加载DLL动态库问题

 java.lang.UnsatisfiedLinkError: Can not load XXX library ... JNA不能加载DLL动态库问题

1, 版本问题。

版本一定要对应。

64位系统,对应64jdk或者jre,同时对应动态库也需要64位的。

32位也是如此对应。

 

如果机器上装了两套jrejdk, 例如同时装了3264jre, 需要将本机运行的jre设定为64的版本,具体为控制面板的java 控制台中设置对应的java版本。

 点击Java,查看,进行查找和添加等操作。确保64位的启用。


 

 

2,路径问题。

1:使用JNA 加载dll你首先需要下载JNA.jar,这个jar文件可以在sun官网下载到。

2dllName这个地方只能是dll的名字,不能加".dll"这个是为了跨平台。

 使用JNA通常会遇到不能加载的问题,这一般是应为dll文件没有放在正确的位置导致的。

     

 

路径可以设置为绝对路径或相对路径。

绝对路径:

TestDll1 INSTANCE = (TestDll1)Native.loadLibrary("D:\\test\\TestDll1", TestDll1.class);

然后DLL放到D盘下面test文件夹下。

 

相对路径:

web服务中,可以放到WEB-INFres文件夹下

  String realPath = ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath("WEB-INF/res/TestDll1.dll"); 
  String path =realPath.substring(0,realPath.length()-4);
  TestDll1 INSTANCE = (TestDll1)Native.loadLibrary( path, TestDll1.class);

 PS :跨平台的写法

通常我们在使用JNA的时候会使用下面的方式(假设DLL名为helloDll.dll

interface HelloDll extends Library {
   TestDll1 INSTANCE = (TestDll1 )Native.loadLibrary("driver/TestDll1 ", TestDll1 .class);
   public void hello();
}

1.  在这种情况下,我们需要将 TestDll1 这个文件拷贝到 driver 目录下。

2. 同时为了跨平台,相对路径应该这么写:

"driver" + File.separator + "TestDll1 "

3. 另外,如果TestDll1 .dll依赖其他包的话,也要将包拷贝到driver目录下或是系统路径。查看dll依赖关系的工具很多,google一下就行了。

  

参考:

经过上述步骤,基本可以解决,如果还不行,参考如下步骤:

 1dll文件要放到项目路径下;

  2:把dll文件放到库文件路径下,执行这句代码 System.out.println(System.getProperty("java.library.path"));

       然后把dll文件copy到任意一个路径下

  3dll名字好像不能带有“_”(这个是我自己遇到的一个问题,仅供参考)

 

注意到这三点基本可以解决使用JNA加载C++Delphi,Cdll的所有问题了。

链接:

http://blog.sina.com.cn/s/blog_b7c09bc00101d2sk.html

http://blog.csdn.net/zhhniyniy/article/details/7968752

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值