IDEA 使用 JNA 时,DLL 文件路径问题

发布于 2022-09-07 12:40:29 字数 1374 浏览 27 评论 0

1. 问题描述

因工作需要调用第三方提供的 SDK 中的 DLL,所以使用了 JNA 技术。开发步骤及 JNA 的使用方法都已经熟悉了,开发任务也已经完成,但是这中间一直有个问题比较疑惑:IDEA 中 DLL 文件的存放路径,究竟应该放在哪里?

2. 尝试

首先介绍一下项目的目录情况:

开发工具:IDEA JDK 1.8 32bit
目录:   ---根目录
         --- ... 省略
         --- lib(在 Modules 的 Dependencies 中已设置为 lib 目录)
         --- src (设置为 Sources 目录)
         --- ... 省略

第三方提供的 DLL 是 32bit,最终是成功的调用了第三方的 DLL 实现了需求,所以排除了位数不兼容的问题。

  1. 项目的 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 文件防止在对应目录下,结果报错依旧

  2. 项目的 src 目录:
    放在 src 目录,经测试能够正常加载 DLL 文件,由于项目的目录结构原因,放在 src 目录下肯定是不行的,最理想的是放在 lib 目录
  3. 放在 C:Program Files (x86)Javajdk1.8.0_171jrebin 目录:
    放在该目录下也是可以正常加载 DLL 文件的
  4. 放在 C:WindowsSystem32 目录:
    SDK 开发文档上说可以尝试将 DLL 文件放在该目录下,但是在 IDEA 上测试无效。
  5. 修改 IDEA 运行配置中的 VM option 为:-Djava.library.path=D:\***\lib

    图片描述

    该方法也没什么用

  6. 使用绝对路径
    使用绝对路径也没有正确加载 DLL 文件,而且绝对路径也不符合要求

3. 想问的问题:

在 IDEA 中应该如何设置 DLL 文件的路径(除了 src 目录),另外在 IDE 环境之外,如何处理才能保证程序在运行时能正确加载 DLL 文件?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

↘紸啶 2022-09-14 12:40:29

只管根据库名加载动态链接库的话:

先说下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即可。

这样设置的话,就不需要关心开发工具的影响。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文