我正在尝试使用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源代码可用。
答案 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 版本
来自其中一个镜子,即
来自 zip 使用:
<块引用>bin\x64\tcnative-1.dll