无法在AMD 64位平台上加载IA 32位.dll

时间:2011-11-13 16:50:26

标签: java windows dll java-native-interface

我正在尝试使用SVMLight

从Java中使用JNI wrapper on this page
  static {
    System.loadLibrary("lib/JNI_SVM-light-6.01/lib/svmlight");
  }

我收到以下错误:

  

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

我可以通过重新编译64位的.dll来解决这个问题吗? 我该怎么做?我可以使用其他一些解决方法吗? SVMLight使C源代码可用。

15 个答案:

答案 0 :(得分:69)

是的,你必须重新编译64位的DLL。您唯一的另一个选择是切换到32位JVM,或以其他方式获得一些32位进程代表您加载DLL并以某种方式与该进程通信。

答案 1 :(得分:4)

我使用tibco dll最初打算在Win XP上运行的Java应用程序遇到了同样的问题。为了使它在Windows 7上运行,我使应用程序指向32位JRE。等待看是否有另一种解决方案。

答案 2 :(得分:2)

对第一个问题的简短回答:是的。

更长的回答:也许;这取决于SVMLight的构建过程是否在64位窗口上运行。

最后注意:对System.loadLibrary的调用很愚蠢。使用完整路径名调用System.load或者让它搜索java.library.path。

答案 3 :(得分:1)

在win64bit和JVM 64bit中有同样的问题

通过将dll上传到system32

解决了

答案 4 :(得分:1)

确保将PATH设置为程序文件(x86)而非程序文件。这解决了我的问题。

答案 5 :(得分:1)

来自 - 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 );

答案 6 :(得分:1)

转到

项目属性>>运行>> VM选项

并输入此地址:

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

答案 7 :(得分:0)

我在Windows x64上运行red5(tomcat)时遇到问题以前在Windows x32下运行,出现了下一个错误:

 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版本并设置下一个

时问题解决了

"环境变量"

" Home"

的用户变量

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

"系统变量"

路径[在开头] => C:\ Program Files \ Java \ jdk.1.8.0_60; ..

答案 8 :(得分:0)

我遇到了与此相关的问题并正在阅读

"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 "and it took me an entire night to figure out.

我通过将C:\opencv\build\java\x64中的dll复制到我的system32文件夹来解决了我的问题。我希望这会对某人有所帮助。

答案 9 :(得分:0)

以下是从命令行/命令提示符编译的人的答案。它不需要更改您的Path环境变量;它只是让你使用32位JVM来使用32位DLL的程序。

对于编译,使用哪个javac无关紧要 - 32位或64位。

>javac MyProgramWith32BitNativeLib.java

对于程序的实际执行, 非常重要,以指定32位版本的java.exe

的路径

我将发布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

答案 10 :(得分:0)

只需安装下载jdk_x86  它安装在Program Files(x86)中并设置项目中的jre路径。多数民众赞成。

答案 11 :(得分:0)

不用担心,您只需将本机库中的.dll从x64更改为x86。

例如:- 您可能已经选择了此(C:\ opencv \ build \ java \ x64)。

相反,您为本机库(C:\ opencv \ build \ java \ x86)选择此选项。

答案 12 :(得分:0)

我的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;

开始工作...希望对大家有帮助。

答案 13 :(得分:0)

对于本机库位置,请在X86上使用X64。至少我有这个固定的问题。

答案 14 :(得分:0)

无需为 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