JNA 在个人电脑上的不同行为
JNA Different behavior on pcs
我有一个 java 程序可以与 jna 一起工作并加载一个 dll。在我的开发计算机上,程序 运行s 没有问题。但是当我 运行 程序在另一台电脑上时,我得到程序无法找到依赖 dll 的错误。但是我的 dll 只依赖于一个 dll,这个 dll 在同一个文件夹中。
我 运行 程序作为 jar Windows 7. Dependency walker 在两台电脑上显示相同的依赖项。
我不知道这些计算机之间的问题或区别是什么。
为什么程序无法加载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 程序位于同一文件夹中)。
加载库的方法如下:
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");以获得更好的错误消息。
问题的根源是 JNA 库路径系统的名称错误 属性。正确的名字是jna.library.path
.
1) Start your application with -Djna.debug_load=true -Djna.debug_load.jna=true
to get some information where the JNA library is looking for the DLL.
2) Shouldn't it be rather jna.library.path
instead of jna.platform.library.path
.
3) Maybe you are mixing 32bit/64bit DLL/JVM?
我有一个 java 程序可以与 jna 一起工作并加载一个 dll。在我的开发计算机上,程序 运行s 没有问题。但是当我 运行 程序在另一台电脑上时,我得到程序无法找到依赖 dll 的错误。但是我的 dll 只依赖于一个 dll,这个 dll 在同一个文件夹中。
我 运行 程序作为 jar Windows 7. Dependency walker 在两台电脑上显示相同的依赖项。
我不知道这些计算机之间的问题或区别是什么。
为什么程序无法加载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 程序位于同一文件夹中)。
加载库的方法如下:
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");以获得更好的错误消息。
问题的根源是 JNA 库路径系统的名称错误 属性。正确的名字是jna.library.path
.
1) Start your application with
-Djna.debug_load=true -Djna.debug_load.jna=true
to get some information where the JNA library is looking for the DLL.
2) Shouldn't it be ratherjna.library.path
instead ofjna.platform.library.path
.
3) Maybe you are mixing 32bit/64bit DLL/JVM?