Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t在AMD 64位平台上加载IA 32位.dll_Java_Windows_Dll_Java Native Interface - Fatal编程技术网

Java Can';t在AMD 64位平台上加载IA 32位.dll

Java Can';t在AMD 64位平台上加载IA 32位.dll,java,windows,dll,java-native-interface,Java,Windows,Dll,Java Native Interface,我正在尝试从Java使用,使用: 我得到以下错误: 。。。lib\JNI\u SVM-light-6.01\lib\svmlight.dll:无法加载IA 32位.dll 在AMD 64位平台上 我可以通过重新编译64位的.dll来解决这个问题吗我该怎么做呢?还有其他解决办法吗?SVMLight使C源代码可用。是的,您必须重新编译64位的DLL。您唯一的其他选择是切换到32位JVM,或者让某个32位进程代表您加载DLL,并以某种方式与该进程通信。第一个问题的简短回答:是 更长的回答:也许;这取决

我正在尝试从Java使用,使用:

我得到以下错误:

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


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

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

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

更长的回答:也许;这取决于SVMLight的生成过程是否在64位windows上运行


最后一点注意:调用System.loadLibrary是愚蠢的。要么使用完整路径名调用System.load,要么让它搜索java.library.path。

我在使用tibco dll的java应用程序中遇到了同样的问题,该应用程序最初打算在Win XP上运行。为了让它在Windows7上运行,我将应用程序指向32位JRE。正在等待查看是否有其他解决方案。

在Win64位和JVM 64位中存在相同的问题


通过将dll上载到system32解决了此问题。我在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版本并设置next时,问题已解决

“环境变量”

“主页的用户变量”

JAVA\u HOME=>C:\Program Files(x86)\JAVA\jdk.1.6.0\u 45

“系统变量”


路径[开头]=>C:\Program Files\Java\jdk.1.8.0\u 60

确保将路径设置为程序文件(x86)而不是程序文件。这就解决了我的问题。

这是从-

如果设置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"

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

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

下面是一个答案,适用于那些从命令行/命令提示符编译的人。它不需要更改
路径
环境变量;它只允许您将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>

只要去安装下载
它安装在程序文件(x86)中,并在项目中设置jre路径。就这样。

不用担心,只需在本机库中将.dll从x64更改为x86即可

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


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

我的windows笔记本电脑同时具有我突然开始面对的32位和64位客户端,然后我对path变量重新排序,如下所示

之前:

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的生成

在上下载64x版本

从其中一个镜子,即

从zip使用:

bin\x64\tcnative-1.dll


如何切换到32位JVM?这是我可以传递的参数,还是我需要下载并配置新的参数?下载并安装一个32位jvm。@Rosarch:Yup,64位机器可以运行32位可执行文件。这将是让32位DLL工作的最简单方法。我问了很多问题。你对哪个回答“是”?哈。也许你的意思是“使用程序文件(x86)下的jvm,以确保它是32位版本”?嗨,你能详细说明一下你是如何让你的应用程序指向32位JRE的吗?这是您在IDE中做的还是以编程方式做的?这是不可能的,文件的位置不会改变任何东西
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;