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

我正在尝试使用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。 你唯一的select是切换到一个32位的JVM,否则得到一些32位的进程代表你加载DLL,并以某种方式与这个进程通信。

我有一个使用tibco dll的Java应用程序的相同问题,原本打算在Win XP上运行。 为了让它在Windows 7上运行,我将应用程序指向了32位JRE。 等待看看是否有另一个解决scheme。

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

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

最后一点:对System.loadLibrary的调用是愚蠢的。 要么使用全path名称来调用System.load,要么让它searchjava.library.path。

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

解决了上传DLL到system32

从 – 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 ); 

项目属性>>运行>>虚拟机选项

并把这个地址:

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

在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版本并设置下一个时解决的问题

“环境variables”

“家庭用户variables”

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

“系统variables”

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

确保您将PATH设置为Program Files(x86)而不是Program Files 。 这解决了我的问题。

我有一个相关的问题,正在阅读

 "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文件夹中解决了我的问题。 我希望这会对某人有所帮助。

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

对于编译,应该使用哪个javac – 32位或64位。

 >javac MyProgramWith32BitNativeLib.java 

对于程序的实际执行,指定到32位版本的java.exe的path很重要的

我将发布一个Windows代码示例,因为这似乎是OP使用的操作系统。

视窗

代码很可能是这样的:

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

jre之后的数字会有所不同。 要find您应该使用的数字,请input:

 >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