小编hot*_*ure的帖子

JNI%1不是有效的Win32应用程序

我正在使用JDK 1.7_25(64位)在64位Windows 8上运行Netbeans,遵循NetBeans的初始JNI的说明(https://netbeans.org/kb/docs/cnd/beginning-jni- linux.html)

这些说明适用于linux,但我认为Windows的原理是相同的(生成.dll文件而不是.so,在JDK中使用win32包含等)

我安装了Cygwin64以及Cygwin32.使用Cygwin64,我能够从我的C/C++动态库项目生成64位DLL.但是,当我调用System.load("path/to/JNITest.dll")时,我得到:

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Users\Andrew\Documents\NetBeansProjects\JNITestLib\dist\JNITest.dll: %1 is not a valid Win32 application
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1957)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1882)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1843)
    at java.lang.Runtime.load0(Runtime.java:795)
    at java.lang.System.load(System.java:1061)
    at jnitest.JNITest.main(JNITest.java:8)
Java Result: 1
Run Code Online (Sandbox Code Playgroud)

从我收集的内容来看,这通常是在32位虚拟机上加载64位应用程序时的情况,但我的netbeans.conf指向64位JVM.

另外,当我使用32位版本的Cygwin编译并运行时,我得到了

Can't load IA 32-bit .dll on a AMD 64-bit platform
Run Code Online (Sandbox Code Playgroud)

我很确定我正确地生成了DLL文件,它只是一个简单的HelloWorld printf来遵循JNI教程.我对JNI和C很新,所以我不确定从哪里开始调试.我所做的最好的是32位和64位DLL,我确保我的C编译器(Cygwin)是64位,我的JVM也是.

我很感激任何见解!

编辑:这是包含的文件

=== Java(JNITest.java)===

package jnitest;

public class JNITest {

    public static void main(String[] args) {
        System.out.println("JVM: " + System.getProperty("sun.arch.data.model"));
        System.load("C:\\Users\\Andrew\\Documents\\NetBeansProjects\\JNITestLib\\dist\\JNITest.dll");

        new JNITest().doHello();
    }

    public native void …
Run Code Online (Sandbox Code Playgroud)

java dll 64-bit java-native-interface unsatisfiedlinkerror

2
推荐指数
1
解决办法
1万
查看次数