【java.lang.UnsatisfiedLinkError: 找不到指定的模塊。】問題的解決


Java程序引用C寫的DLL動態庫,出現如下錯誤:【java.lang.UnsatisfiedLinkError: 找不到指定的模塊。】網上查詢有三種可能導致此錯誤。

一、JDK版本問題。JDK64位對應DLL文件64位,JDK32位對應DLL文件32位。我的DLL是32位的,Windows系統是64位的,安裝了JDK64位的版本和JDK32位的版本(兼容性考慮)。運行Java程序是在32位JDK上面進行的,這點可以通過java -d32 -version命令來獲得證實:

C:\Users\Andy>java -d32 -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) Client VM (build 25.144-b01, mixed mode)

如果當前Java是64位的JDK,上述命令會報錯。

二、DLL路徑有問題,比如絕對路徑寫錯了。其實我引用DLL一直用相對路徑,就是直接寫DLL的文件名,然后把此DLL放到CLASSPATH之中,從來沒出問題過。

因為此問題的出現,我改寫成絕對路徑,結果新的錯誤出來了:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'C:\Work\helloworld\WebContent\WEB-INF\classes\TEST.dll':
Native library (win32-x86/D:\Work\helloworld\WebContent\WEB-INF\classes\TEST.dll) not found in resource path
([file:/D:/Work/helloworld/WebContent/WEB-INF/classes/......)

更何況,絕對路徑就是拷貝粘貼的事兒,幾乎不會出錯;甚至通過

System.out.println(System.getProperty("java.library.path"));

命令檢測,將DLL放置於指定目錄(比如說JDK的BIN目錄),問題同樣出現;所以,問題不在這兒。

三、DLL文件依賴問題。

可以用depends.exe工具檢測DLL文件的相關依賴。下載地址(官網):http://www.dependencywalker.com/,可以選擇下載安裝32位版的,或者是64位版本的。

運行工具對DLL進行檢測,發覺確實少了依賴包。

 

下載相關包安裝即可。我這里,是安裝【微軟常用運行庫合集-2021.04.07-X64.exe】,問題得到解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM