2013-01-11 43 views
8

我從tutorial NetBeans項目導致異常:線程「main」 java.lang.UnsatisfiedLinkError: Unable to load library「simpleDLL」試圖從Java(JNA)使用DLL。無法加載庫例外

異常:指定的模塊找不到。

試圖將simpleDLL.dll放入項目庫中,但沒有成功複製system32文件夾中的文件。

+2

請檢查simpleDLL是32位或64位。然後檢查,如果JVM也爲32位或64位,他們必須在同一平臺。 –

+0

試圖用另一個DLL和JNI,似乎它的工作原理 – Karloss

回答

11

我有完全一樣的問題,加載DLL,我解決它以這樣的方式

  • 作爲Christian Kuetbach說,檢查你使用的simpleDLL是否與處理器的體系結構兼容,一個32位的DLL不能在64位的機器上工作,並且一個64位的DLL也不能在32位上工作機。
  • 如果DLL是兼容的,那麼問題可能出現在您的java庫路徑中。我把我的DLL到user.dir目錄,然後我用這個代碼:

    設置Java庫路徑user.dir或者也許你想另一條道路:

    String myLibraryPath = System.getProperty("user.dir");//or another absolute or relative path 
    
    System.setProperty("java.library.path", myLibraryPath); 
    

    加載庫:

    的System.loadLibrary ( 「libraryWithoutDLLExtension」);

它爲我工作,嘗試它,並告訴我,如果它適合你。

+0

我在'public static void main(String [] args){'後使用了此代碼。我的圖書館位於user.dir。相同的結果 - 異常 – Karloss

+0

'線程中的異常「main」java.lang.UnsatisfiedLinkError:C:\ Windows \ System32 \ simpleDLL.dll:找不到依賴庫「 – Karloss

+0

它不在你的user.dir中,user.dir是java程序所在的路徑,除非你找到它在C:\ Windows \ System32 \你沒有你的dll在user.dir – BackSlash

5

請檢查simpleDLL是32位還是64位。然後檢查JVM是否也是32位或64位。他們必須爲同一個平臺。

你也可以指定一個絕對路徑,如果你改變loadLibrary()load()http://www.chilkatsoft.com/p/p_499.asp

+0

謝謝你sponse! 用Cygwin命令「file」檢查了simpleDLL,這個dll是32位的,我也有32位的機器。 – Karloss

+0

以絕對路徑嘗試獲得相同的結果 – Karloss

2

我只能運行在32位(Xp)。

將文件夾中的DLL 「C:\ Windows \ System32下」

helloWorldDLL lib = (helloWorldDLL) Native.loadLibrary("helloworldDLL", helloWorldDLL.class);

如果錯誤java.lang.UnsatisfiedLinkError中:無法加載庫」依舊,使用的Dependency Walker來查看相關的DLL。

Dependency Walker