吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 384|回复: 1
收起左侧

[求助] java可调用c代码生成dll异常

[复制链接]
lengong 发表于 2024-1-5 17:40

c代码 HelloWorld.c 如下
[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 如下
[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
按照楼主的思路操作一遍,感谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 12:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表