首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JNA在pcs上的不同行为

JNA在pcs上的不同行为
EN

Stack Overflow用户
提问于 2016-03-24 11:49:26
回答 1查看 217关注 0票数 0

我有一个java程序,它与jna一起工作并加载一个dll。在我开发的计算机上,程序运行时没有问题。但是,当我在另一台pc上运行程序时,我会得到一个错误,即程序找不到dependet。但我的dll只依赖于一个dll,此dll位于同一个文件夹中。

我在Windows 7上以jar的形式运行这个程序,Dependency在两台pc上显示相同的依赖关系。

我不知道这些计算机之间有什么问题或区别。

为什么程序不能加载dll?

错误信息:

代码语言:javascript
复制
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\THZ-standalone\Dlls\BladeTileLocator.dll: Can't find dependent libraries
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.load0(Unknown Source)
    at java.lang.System.load(Unknown Source)
    at de.thz.cameracontrol.utils.Utils.loadLibrary(Utils.java:169)
    at de.thz.cameracontrol.server.Server.<init>(Server.java:124)
    at de.thz.cameracontrol.server.Server.main(Server.java:165)

我用java -jar Program.jar调用程序。dlls保存在一个文件夹中(此文件夹与java程序位于同一个文件夹中)。

以下是libray加载的方法:

代码语言:javascript
复制
public static Object loadLibrary(String libraryName, Class<?> clazz) {

final String userDir = System.getProperty("user.dir");
final String filePathToUse = userDir + "\\" + DLL_PATH;

System.setProperty("jna.platform.library.path", filePathToUse);
System.load(filePathToUse + libraryName + ".dll");

return Native.loadLibrary(libraryName, clazz);
// return Native.loadLibrary(libraryName, clazz);

}

我使用语句System.load(filePathToUse + libraryName +“.dll”)来获得更好的错误消息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-29 05:53:26

问题的根源是JNA库路径系统属性的错误名称。正确的名称是jna.library.path

1)使用-Djna.debug_load=true -Djna.debug_load.jna=true启动应用程序,以获取JNA库查找DLL的一些信息。jna.platform.library.path.3) ( 2)不应该是jna.library.path而不是jna.library.path,也许您是在混合32位/64位DLL/JVM吗?

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

https://stackoverflow.com/questions/36199476

复制
相关文章

相似问题

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