lengong 发表于 2024-1-5 17:40

java可调用c代码生成dll异常


c代码 HelloWorld.c 如下
#include <jni.h>


void hello() {
    printf("Hello from C!\n");
}


JNIEXPORT void JNICALL Java_MyClass_hello(JNIEnv *env, jobject obj) {
    hello(); // 调用C函数
}

java代码 MyClass.java 如下
public class MyClass {    static {
      System.loadLibrary("HelloWorld");
    }
   
    public native void hello();
    public static void main(String[] args) {
      MyClass m = new MyClass();
      m.hello();

    }
}
这个demo其实很简单,但是诡异的地方在于生成64位的dll并且用64位的jdk运行则一切都正常
但是如果生成32位的dll并且用32位的jdk则会报错,提示 Exception in thread "main" java.lang.UnsatisfiedLinkError: MyClass.hello()V
dll用mingw64的gcc 编译生成
64位dll编译命令是:gcc-shared "-I%JAVA_HOME%/include" -I"%JAVA_HOME%/include/win32" HelloWorld.c-o HelloWorld.dll
32位dll编译命令是:gcc -m32 -shared "-I%JAVA_HOME%/include" -I"%JAVA_HOME%/include/win32" HelloWorld.c-o HelloWorld.dll

FruitBaby 发表于 2024-1-5 22:51

按照楼主的思路操作一遍,感谢
页: [1]
查看完整版本: java可调用c代码生成dll异常