2015-10-07 67 views
0
DLL INSTANCE = (DLL) Native.loadLibrary(Settings.getSingletonInstance().getProperty("default.ergoPointer.path"), DLL.class); 

我将dll路径存储在设置文件中。当我走的java.lang.UnsatisfiedLinkError:无法加载库

Settings.getSingletonInstance().getProperty("default.ergoPointer.path" 

这里输出:C:\Users\Argenit\Desktop\aaa\dll\ErgoPointer_64_Bit.dll

错误部分:

java.lang.UnsatisfiedLinkError: Unable to load library 'C:\Users\Argenit\Desktop\aaa\dll\ErgoPointer_64_Bit.dll': Native library (win32-x86-64/C:\Users\Argenit\Desktop\aaa\dll\ErgoPointer_64_Bit.dll) not found in resource path ([file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/bin/, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/resources/, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/fits.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/json.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/junit-4.8.2.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/kdu_jni.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/log4j-1.2.16.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/JNA/jna-4.1.0.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/JNA/jna-platform-4.1.0.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/ini4j-0.5.4.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/JNA/, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/gluegen-rt.jar, file:/C:/Users/Argenit/Desktop/Pathology_JAVA/Digital_Pathology/lib/jogl.jar])

如果我添加(DLL)的项目和写一个外部类文件夹:loadLibrary("ErgoPointer_64_Bit"),它工作在这台机器,但当我把可运行jar,它不能找到ErgoPointer_64_Bit所以我想给绝对路径的dll。但它对我不起作用。

我也试过:

C:\Users\Argenit\Desktop\aaa\dll\ErgoPointer_64_Bit

dll\ErgoPointer_64_Bit

ErgoPointer_64_Bit

dll\ErgoPointer_64_Bit.dll

ErgoPointer_64_Bit.dll

回答

2

设置呼叫Native.loadLibrary()只用基本名称之前的系统属性的java.library.path。

System.setProperty("java.library.path", 
      "C:\\Users\\Argenit\\Desktop\\aaa\\dll;" 
       + System.getProperty("java.library.path")); 
DLL INSTANCE = (DLL) Native.loadLibrary("ErgoPointer_64_Bit", DLL.class); 

您还可以在命令行上设置java.library.path。例如。

java "-Djava.library.path=C:\Users\Argenit\Desktop\aaa\dll\" -jar somejar.jar 
+0

我如何知道计算机名称(Argenit)在不同的计算机上? – Dauezevy

+1

您可以通过'InetAddress.getLocalHost()。getHostName()'获取计算机名称,但实际上Argenit看起来像用户名而不是主机名。你可以通过'System.getProperty(“user.home”)''获得用户的主目录,或者通过'System.getProperty(“user.name”)'获取用户的名字。 – WillShackleford

+0

非常感谢,我发现了错误。 os是64位,但java是32位。我导出64位的DLL,所以为什么它没有工作 – Dauezevy

相关问题