2012-08-22 161 views
2

我想在我的項目中使用此JAR文件(http://sourceforge.net/projects/uirt-j/)。在Eclipse中,我使用了選項Project> Java Build Path>添加外部JAR來導入它。我可以在Ecplise中看到所有類的JAR文件。這個JAR包含兩個dll文件。爲了加載的dll,我投入System32下目錄,但是當執行我的代碼,我得到了如下錯誤:Java:util_USBUIRT.dll:找不到依賴庫

Exception in thread "main" java.lang.UnsatisfiedLinkError: 
C:\Windows\System32\util_USBUIRT.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.loadLibrary0(Unknown Source) 
at java.lang.System.loadLibrary(Unknown Source) 
at util.USBUIRT.<clinit>(USBUIRT.java:269) 
at Uirt.main(Uirt.java:6) 

使用依賴沃克我可以看到,所有的DLL都在System32文件夾中。我的代碼:

import util.USBUIRT; 
public class Uirt { 
public static void main(String[] args) { 
    String code = "0000"; 
    try { 
     USBUIRT.transmitIR(code, 2, 3, 2); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
} 

如果JAR單獨執行,那可以正常工作。謝謝。 (Windows 7x64)

+1

參見[如何爲本地庫添加到「的java.library.path」的Eclipse啓動(http://stackoverflow.com/q/661320/1048330) – tenorsax

+0

我嘗試,但同樣的錯誤發生:java.lang.UnsatisfiedLinkError:C:\ Users \ Jonathan \ workspace \ UIRTTest \ lib \ util_USBUIRT.dll:無法找到依賴庫 –

回答

4

提到的jar中的dll是32位的。環境是Win7 x64。我假設JVM是32位,否則會有另一個錯誤,即:Can't load IA 32-bit .dll on a AMD 64-bit platform或類似的。

嘗試將dll複製到C:\Windows\SysWOW64而不是C:\Windows\System32。 32位dll應該進入C:\Windows\SysWOW64。它爲我工作,雖然我得到util.USBUIRT$NotInitializedException這可能是圖書館正確加載的指示。

File System Redirector該文章可能會對SysWOW64System32有所瞭解。

編輯:扭捏的java.library.path

你也可以去在評論中提到的解決方案,例如,複製的DLL到C:\tmp與參數運行:

-Djava.library.path="C:\tmp;${env_var:PATH}" 

但由於這兩個dll之間存在依賴關係,因此C:\tmp必須位於PATH。否則還有UnsatisfiedLinkError。手動加載uuirtdrv.dll應該幫助,即:

import util.USBUIRT; 
public class Uirt { 
    static { 
     System.loadLibrary("uuirtdrv"); 
    } 

public static void main(String[] args) { 
    String code = "0000"; 
    try { 
     USBUIRT.transmitIR(code, 2, 3, 2); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
} 
+0

非常感謝提前。我的JRE是x64。我安裝32位版本並且工作!謝謝! –

+0

@JonathanSimonPrates很高興它幫助你! :) – tenorsax

+1

你救了我! JVM是32,但Windows是64,所以我必須將jmtp.dll放在C:\ Windows \ SysWOW64上才能正常工作。 – Bagata