簡體   English   中英

無法在 AMD 64 位平台上加載 IA 32 位 .dll

[英]Can't load IA 32-bit .dll on a AMD 64-bit platform

我正在嘗試使用 Java 中的SVMLight ,使用此頁面上JNI 包裝器

  static {
    System.loadLibrary("lib/JNI_SVM-light-6.01/lib/svmlight");
  }

我收到以下錯誤:

... lib\\JNI_SVM-light-6.01\\lib\\svmlight.dll:無法在 AMD 64 位平台上加載 IA 32 位 .dll

我可以通過重新編譯 64 位的 .dll 來解決這個問題嗎? 我該怎么做呢? 我可以使用其他一些解決方法嗎? SVMLight 使 C 源代碼可用。

是的,您必須為 64 位重新編譯 DLL。 您唯一的其他選擇是切換到 32 位 JVM,或者讓一些 32 位進程代表您加載 DLL 並以某種方式與該進程通信。

我在使用最初打算在 Win XP 上運行的 tibco dll 的 Java 應用程序中遇到了同樣的問題。 為了讓它在 Windows 7 上運行,我將應用程序指向 32 位 JRE。 等待看看是否有其他解決方案。

第一個問題的簡短回答:是的。

更長的答案:也許; 這取決於 SVMLight 的構建過程是否在 64 位 Windows 上運行。

最后一點:對 System.loadLibrary 的調用是愚蠢的。 要么使用完整路徑名調用 System.load,要么讓它搜索 java.library.path。

在 win64bit 和 JVM 64bit 中有同樣的問題

已通過將dll上傳到system32解決

確保您將 PATH 設置為Program Files (x86)而不是Program Files 那解決了我的問題。

來自 - http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/

如果設置java.library.path,需要有以下幾行才能工作。

Field fieldSysPath;
fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
fieldSysPath.setAccessible( true );
fieldSysPath.set( null, null );

項目屬性 >> 運行 >> VM 選項

並把這個地址:

-Djava.library.path="C:\opencv\build\java\x64"

只需去安裝下載jdk_x86並將其安裝在 Program Files (x86) 中並在您的項目中設置 jre 路徑。 而已。

在以前在 Windows x32 下運行的 Windows x64 上運行 red5(tomcat) 時遇到問題,出現下一個錯誤:

 INFO pool-15-thread-1 com.home.launcher.CommandLauncher - Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\....\lib\Data Samolet.dll: Can't find dependent libraries
INFO pool-15-thread-1 com.home.launcher.CommandLauncher - at java.lang.ClassLoader$NativeLibrary.load(Native Method)

當我安裝 Java x32 版本並設置 next 時問題解決了

“環境變量”

“家庭用戶變量”

JAVA_HOME => C:\\Program Files (x86)\\Java\\jdk.1.6.0_45

“系統變量”

路徑[開頭] => C:\\Program Files\\Java\\jdk.1.8.0_60;...

我有一個與此相關的問題,正在閱讀

"Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\opencv\build\java\x86\opencv_java2413.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform "

我花了整晚才弄明白。

我通過將C:\\opencv\\build\\java\\x64的 dll 復制到我的 system32 文件夾解決了我的問題。 我希望這會對某人有所幫助。

這是從命令行/命令提示符編譯的人的答案。 它不需要更改您的Path環境變量; 它只是讓您將 32 位JVM用於帶有 32 位DLL

對於編譯,使用哪個javac無關緊要 - 32 位或 64 位。

>javac MyProgramWith32BitNativeLib.java

對於程序的實際執行,指定java.exe 32位版本的路徑重要

我將為Windows發布一個代碼示例,因為這似乎是 OP 使用的操作系統。

視窗

最有可能的代碼類似於:

>"C:\Program Files (x86)\Java\jre#.#.#_###\bin\java.exe" MyProgramWith32BitNativeLib 

不同之處在於jre之后的數字。 要查找您應該使用的數字,請輸入:

>dir "C:\Program Files (x86)\Java\"

在我的機器上,過程如下

C:\Users\me\MyProject>dir "C:\Program Files (x86)\Java"
 Volume in drive C is Windows
 Volume Serial Number is 0000-9999

 Directory of C:\Program Files (x86)\Java

11/03/2016  09:07 PM    <DIR>          .
11/03/2016  09:07 PM    <DIR>          ..
11/03/2016  09:07 PM    <DIR>          jre1.8.0_111
               0 File(s)              0 bytes
               3 Dir(s)  107,641,901,056 bytes free

C:\Users\me\MyProject>

所以我知道我的數字是1.8.0_111 ,我的命令是

C:\Users\me\MyProject>"C:\Program Files (x86)\Java\jre1.8.0_111\bin\java.exe" MyProgramWith32BitNativeLib

不用擔心,您應該將本機庫中的 .dll 從 x64 更改為 x86。

例如:- 您可能選擇了這個 (C:\\opencv\\build\\java\\x64)。

相反,您為本機庫(C:\\opencv\\build\\java\\x86)選擇了這個。

我的 Windows 筆記本電腦同時擁有 32 位和 64 位客戶端,我突然開始面對,然后我重新排序了路徑變量,如下所示

前:

C:\app\oracle64\product\12.1.0\client_1\bin;
C:\app\oracle32\product\12.1.0\client_1\bin;

后:

C:\app\oracle32\product\12.1.0\client_1\bin;
C:\app\oracle64\product\12.1.0\client_1\bin;

開始工作...希望這對大家有幫助。

對於您的本機庫位置,請使用 X64 而不是 X86。 至少我遇到了這個固定的問題。

不需要為 Win64 構建。

https://tomcat.apache.org/download-native.cgi上下載 64x 版本

從其中一個鏡子,即

https://mirror.checkdomain.de/apache/tomcat/tomcat-connectors/native/1.2.28/binaries/tomcat-native-1.2.28-openssl-1.1.1k-win32-bin.zip

從 zip 使用:

bin\\x64\\tcnative-1.dll

我遇到了同樣的問題,@Daniel Pryden 是對的,我都嘗試過,並且轉移到 32 位 JVM 對我有用

暫無
暫無

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

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