2015-10-07 65 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

相關問題