IDEA 使用 JNA 时,DLL 文件路径问题
1. 问题描述
因工作需要调用第三方提供的 SDK 中的 DLL,所以使用了 JNA 技术。开发步骤及 JNA 的使用方法都已经熟悉了,开发任务也已经完成,但是这中间一直有个问题比较疑惑:IDEA 中 DLL 文件的存放路径,究竟应该放在哪里?
2. 尝试
首先介绍一下项目的目录情况:
开发工具:IDEA JDK 1.8 32bit
目录: ---根目录
--- ... 省略
--- lib(在 Modules 的 Dependencies 中已设置为 lib 目录)
--- src (设置为 Sources 目录)
--- ... 省略
第三方提供的 DLL 是 32bit,最终是成功的调用了第三方的 DLL 实现了需求,所以排除了位数不兼容的问题。
项目的 lib 目录:
Caused by: java.lang.UnsatisfiedLinkError: Unable to load library 'dllName': Native library (win32-x86/dllName.dll) not found in resource path ([file:/C:/Program%20Files%20(x86)/Java/jdk1.8.0_171/jre/lib/charsets.jar, ......
报错如上,报错中有两种路径,我都尝试过将 DLL 文件防止在对应目录下,结果报错依旧
- 项目的 src 目录:
放在 src 目录,经测试能够正常加载 DLL 文件,由于项目的目录结构原因,放在 src 目录下肯定是不行的,最理想的是放在 lib 目录 - 放在 C:Program Files (x86)Javajdk1.8.0_171jrebin 目录:
放在该目录下也是可以正常加载 DLL 文件的 - 放在 C:WindowsSystem32 目录:
SDK 开发文档上说可以尝试将 DLL 文件放在该目录下,但是在 IDEA 上测试无效。 - 修改 IDEA 运行配置中的 VM option 为:-Djava.library.path=D:\***\lib
该方法也没什么用
- 使用绝对路径
使用绝对路径也没有正确加载 DLL 文件,而且绝对路径也不符合要求
3. 想问的问题:
在 IDEA 中应该如何设置 DLL 文件的路径(除了 src 目录),另外在 IDE 环境之外,如何处理才能保证程序在运行时能正确加载 DLL 文件?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
只管根据库名加载动态链接库的话:
先说下jni,jni加载动态链接库只会从JVM系统属性java.library.path所设置的路径去取,而windows、linux、mac下这个变量默认值是不一样的,如果要自定义路径,在windows中最简单,在PATH中追加即可,而mac以及linux就没有这么简单了,原本也可以通过设置系统变量如LD_LIBRARY_PATH来向java.library.path追加路径,但在某些系统已经把该变量给废弃了,所以mac和linux建议通过-Djava.library.path=xxx来设置自定义库路径。
JNA的话,默认从系统库中去查找,windows下跟JNI一样,PATH中追加即可。而在linux和mac下需要通过-Djna.library.path=xxx来配置,当然你也可以设置成全局库,以ubuntu为例:新建文件 /etc/ld.so.conf.d/xxx.conf, xxx.conf添加自定义库路径,最后运行命令 sudo ldconfig即可。
这样设置的话,就不需要关心开发工具的影响。