![](/img/trans.png)
[英]Can't load IA 32-bit .dll on a AMD 64-bit platform with 32 bit JVM
[英]Can't load IA 32-bit .dll on a AMD 64-bit platform
是的,您必須為 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 版本
從其中一個鏡子,即
從 zip 使用:
bin\\x64\\tcnative-1.dll
我遇到了同樣的問題,@Daniel Pryden 是對的,我都嘗試過,並且轉移到 32 位 JVM 對我有用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.