【发布时间】:2018-12-08 01:31:48
【问题描述】:
在 JNA 的帮助下实现了一个利用 .dll 文件的 java 驱动程序项目。当我构建和运行时,它作为一个项目工作得很好。但是,当这个驱动程序项目被 jarred 并成为另一个更大项目的依赖项时,我无法加载 .dll 文件。
我正在使用Native.loadLibrary(LIBRARY_NAME, MY_INTERFACE.class) 语法将库加载到驱动程序项目中。此行成功将我的库加载到驱动程序项目中,但当它是另一个项目的依赖项时返回 null。如何调试并找出问题所在?
重现此行为:
OS: Windows 10
IDE: Intellij Community 2018.2
Java: 1.8.0_191
driver project: https://github.com/ClearControl/GS16AO64c
parent project: https://github.com/AhmetCanSolak/clearcontrol
【问题讨论】:
-
尝试将dll移动到
resources目录,然后使用Native.extractFromResourcePath将其解压到文件系统,然后将File的路径传递给loadLibrary。 -
嗯,实际上,查看
loadLibrary的源代码,它试图将其作为最后的手段。如果将 DLL 移动到资源目录的根目录并使用/dll-name.dll加载库,它可以工作吗? -
Native.extractFromResourcePath()需要我们在接口文件中没有的 try/catch 块。 -
我尝试将
lib.win64包中的dll和lib文件移动到资源根目录下,但是仍然没有解决问题。 -
我仍然能够在驱动程序项目中运行测试,但是,我无法从父项目调用驱动程序作为
gradle依赖项。
标签: java windows intellij-idea dll jna