首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在JNA中找到加载DLL的指定模块

无法在JNA中找到加载DLL的指定模块
EN

Stack Overflow用户
提问于 2020-08-25 16:50:39
回答 1查看 1.6K关注 0票数 1

我有一个类首字母:

代码语言:javascript
运行
复制
System.setProperty("java.library.path", "C:\\Users\\lucas\\Desktop\\libraries");
System.loadLibrary("libTTARCHHelper");
TTARCH_LIBRARY=(TtarchLibrary)Native.loadLibrary(TtarchLibrary.class);

而DLL位于C:\\Users\\lucas\\Desktop\\libraries\\libTTARCHHelper.dll

如果我在Eclipse中运行这个程序,就会得到“找不到指定的模块”,如果我将它作为JAR运行,就会得到‘java.labary.path中没有libTTARCHHelper’。

我该怎么解决这些问题?我甚至尝试将DLL放在PATH环境变量的文件夹中。

使用文件直接加载完成调试:

代码语言:javascript
运行
复制
Aug 26, 2020 12:28:51 AM com.sun.jna.Native extractFromResourcePath
INFO: Looking in classpath from jdk.internal.loader.ClassLoaders$AppClassLoader@c387f44 for /com/sun/jna/win32-x86-64/jnidispatch.dll
Aug 26, 2020 12:28:51 AM com.sun.jna.Native extractFromResourcePath
INFO: Found library resource at jar:file:/C:/Users/lucas/Desktop/My%20Stuff/Eclipse%20Workspaces/Build%20Paths/jna-5.6.0.jar!/com/sun/jna/win32-x86-64/jnidispatch.dll
Aug 26, 2020 12:28:51 AM com.sun.jna.Native extractFromResourcePath
INFO: Extracting library to C:\Users\lucas\AppData\Local\Temp\jna-103324076\jna5931694657592960137.dll
Aug 26, 2020 12:28:51 AM com.sun.jna.NativeLibrary loadLibrary
INFO: Looking for library 'C:\Users\lucas\Desktop\libraries\libTTARCHHelper.dll'
Aug 26, 2020 12:28:51 AM com.sun.jna.NativeLibrary loadLibrary
INFO: Adding paths from jna.library.path: null
Aug 26, 2020 12:28:51 AM com.sun.jna.NativeLibrary loadLibrary
INFO: Trying C:\Users\lucas\Desktop\libraries\libTTARCHHelper.dll
Aug 26, 2020 12:28:51 AM com.sun.jna.NativeLibrary loadLibrary
INFO: Loading failed with message: The specified module could not be found.

Aug 26, 2020 12:28:51 AM com.sun.jna.NativeLibrary loadLibrary
INFO: Adding system paths: []
Aug 26, 2020 12:28:51 AM com.sun.jna.NativeLibrary loadLibrary
INFO: Trying C:\Users\lucas\Desktop\libraries\libTTARCHHelper.dll
Aug 26, 2020 12:28:51 AM com.sun.jna.NativeLibrary loadLibrary
INFO: Loading failed with message: The specified module could not be found.

Aug 26, 2020 12:28:51 AM com.sun.jna.Native extractFromResourcePath
INFO: Looking in classpath from jdk.internal.loader.ClassLoaders$AppClassLoader@c387f44 for C:\Users\lucas\Desktop\libraries\libTTARCHHelper.dll
Aug 26, 2020 12:28:51 AM com.sun.jna.NativeLibrary loadLibrary
INFO: Loading failed with message: Native library (win32-x86-64/C:\Users\lucas\Desktop\libraries\libTTARCHHelper.dll) not found in resource path (C:\Users\lucas\eclipse-workspace\TEST\bin;C:\Users\lucas\Desktop\My Stuff\Eclipse Workspaces\Build Paths\jna-5.6.0.jar)
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'C:\Users\lucas\Desktop\libraries\libTTARCHHelper.dll':
The specified module could not be found.

The specified module could not be found.

剩下的痕迹:

代码语言:javascript
运行
复制
Native library (win32-x86-64/C:\Users\lucas\Desktop\libraries\libTTARCHHelper.dll) not found in resource path (C:\Users\lucas\eclipse-workspace\TEST\bin;C:\Users\lucas\Desktop\My Stuff\Eclipse Workspaces\Build Paths\jna-5.6.0.jar)
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:301)
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:461)
    at com.sun.jna.Library$Handler.<init>(Library.java:192)
    at com.sun.jna.Native.loadLibrary(Native.java:646)
    at com.sun.jna.Native.loadLibrary(Native.java:630)
    at com.test.TTARCHHelper.<clinit>(TTARCHHelper.java:17)
    at com.test.main.main(main.java:6)
    Suppressed: java.lang.UnsatisfiedLinkError: The specified module could not be found.

        at com.sun.jna.Native.open(Native Method)
        at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:191)
        ... 6 more
    Suppressed: java.lang.UnsatisfiedLinkError: The specified module could not be found.

        at com.sun.jna.Native.open(Native Method)
        at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:204)
        ... 6 more
    Suppressed: java.io.IOException: Native library (win32-x86-64/C:\Users\lucas\Desktop\libraries\libTTARCHHelper.dll) not found in resource path (C:\Users\lucas\eclipse-workspace\TEST\bin;C:\Users\lucas\Desktop\My Stuff\Eclipse Workspaces\Build Paths\jna-5.6.0.jar)
        at com.sun.jna.Native.extractFromResourcePath(Native.java:1095)
        at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:275)
        ... 6 more

所以看起来它找不到它,它抛出了一个

代码语言:javascript
运行
复制
java.lang.UnsatisfiedLinkError: The specified module could not be found.

我发现了问题,DLL是错误的。Eclipse运行在64上,JAR使用32位JVM。我也下载了32位dll,现在它在运行JAR时起作用了。但是,Eclipse中的64位dll总是抛出上面的模块异常

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-25 18:10:49

JNA将在jna.library.path环境变量中的位置查找库。

一个选项是将它指定为Eclipse运行配置中的命令行选项。在“运行”菜单中,选择“运行配置”。转到(X)=参数选项卡。将其添加到VM参数字段中:

-Djna.library.path=C:\Users\lucas\Desktop\libraries

在尝试加载DLL之前,还可以在代码中以编程方式设置它:

System.setProperty("jna.library.path", "C:\\Users\\lucas\\Desktop\\libraries");

正如稍后在调试日志中指出的那样,它可能正在查找DLL,但未能打开它。造成这种情况的可能原因可以是:

  • DLL运行时依赖于系统上另一个不在适当路径上的DLL。一个常见的问题是VisualC++可分发。有关更多信息,您可能需要查阅DLL文档。有时,您可以从过程监视器库中使用SysInternals来尝试查看它正在打开的内容。
  • 具有上述依赖DLL的重复/不兼容版本
  • 运行64位JVM并尝试打开不兼容64位的DLL,反之亦然。
  • 您的Java程序可能没有读取库所在目录的权限

要帮助诊断问题,请查看整个堆栈跟踪。虽然最近的错误消息可能与此无关(在“备份”搜索中找不到文件),但如果您向下查找跟踪,您可能会发现先前试图打开DLL时出现的多个被抑制的异常,这可能会为您提供更多信息丰富的调试信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63583607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档