[英]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.