簡體   English   中英

如何使用64位/ 32位系統修復java.lang.UnsatisfiedLinkError問題?

[英]How to fix java.lang.UnsatisfiedLinkError-Problem with 64-bit / 32-bit Systems?

我有一個64位系統,並且想運行一個Java應用程序,該程序需要加載32位dll文件。 我想使用System.load()加載庫。 當使用64位Java-8-JRE時,會發生以下錯誤:

java.lang.UnsatisfiedLinkError: C:\[...]\test.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform. 

在32位Java-6-JRE上運行應用程序時,會提示

java.lang.UnsatisfiedLinkError: C:\[...]\test.dll: Can't find dependent libraries

我嘗試使用64位版本的Java。 因為該dll是32位dll,所以我嘗試在64位版本上運行該應用程序。 但是隨后又發生了另一個錯誤。

我還嘗試使用System.loadLibrary()代替。 但是錯誤似乎相似。

Java的8-64位:

java.lang.UnsatisfiedLinkError: C:\Windows\System32\test.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform

->由於這個錯誤,我可以肯定Java能夠找到該文件。

Java的6-32位:

java.lang.UnsatisfiedLinkError: no test in java.library.path

->由於文件必須存在之前顯示的錯誤。

我的應用程序代碼很短:

使用System.load()

public static void main(String[] args) {
    System.load("C:\\[...]\\test.dll");
}

使用System.loadLibary()

public static void main(String[] args) {
    System.loadLibrary("test");
}

該文件具有所有必要的權限。

可以排除文件不在PATH中的典型錯誤,因為運行64位JVM可以找到文件,但由於需要32位JVM而無法讀取文件。

有任何想法嗎? 謝謝!

解決方案非常簡單...

關於線程https://stackoverflow.com/a/12307577/11011623,System32文件夾(我的文件和依賴項所在的位置)只允許其中包含64位二進制文​​件。 因此找不到32位dll。 在其他路徑上使用System.load()和dll時,系統無法在dll中找到必要的依賴項,因為dll所在的路徑不屬於該路徑...

解決方案是將所有必需的文件從System32移到Windows文件夾,或將包含所有dll及其依賴項的自定義文件夾添加到PATH。 感謝所有有助於解決此問題的意見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM