JNA在个人电脑

时间:2016-03-24 11:49:26

标签: java c++ dll jna

我有一个与jna一起工作的java程序并加载一个dll。在我的开发计算机上,程序运行没有问题。但是当我在不同的PC上运行该程序时,我得到程序无法找到dependet dll的错误。但是我的dll只依赖于一个dll,这个dll在同一个文件夹中。

我在Windows 7上将程序作为jar运行。依赖步行器在两台PC上显示相同的依赖。

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

为什么程序无法加载dll?

错误讯息:

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调用该程序。 dll保存在一个文件夹中(该文件夹与java程序位于同一文件夹中)。

以下是libray加载的方法:

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”);为了更好的错误消息。

1 个答案:

答案 0 :(得分:1)

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

  

1)使用-Djna.debug_load=true -Djna.debug_load.jna=true启动您的应用程序以获取JNA库正在查找DLL的一些信息。

   2)不应该是jna.library.path而不是jna.platform.library.path

3)也许你正在混合32位/ 64bit DLL / JVM?