【问题标题】:Exception in thread "main" java.lang.UnsatisfiedLinkError:proiectP.JavatoC.getval(I)I线程“main”中的异常 java.lang.UnsatisfiedLinkError:proiectP.JavatoC.getval(I)I
【发布时间】:2023-04-06 14:30:01
【问题描述】:

这是我的代码,我已将 .dll 添加到 Java_Home 所在的位置。我有这个错误:

线程“main”中的异常 java.lang.UnsatisfiedLinkError: proiectP.JavatoC.getval(I)I at proiectP.JavatoC.getval(Native 方法)在 proiectP.JavatoC.main(JavatoC.java:19)

public class JavatoC {
    public native int getval(int b);
    static {
        System.loadLibrary("main");
    }

    public static void main(String[] args) {
        try {
            int a;
            int b=3;
            a= new JavatoC().getval(b); 
            System.out.println(a);     
        } catch(Exception e) {
            System.out.println(e);
        }
    }
}

我也尝试写a= new proiectP.JavatoC().getval(b),因为 proietP 是包。它不起作用。

【问题讨论】:

  • 只是猜测,也许您正在尝试将 32 位本机接口 DLL 与 64 位 Java 运行时一起使用,反之亦然?
  • 一开始我犯了那个错误,并告诉我这是错误的,但现在我安装了一个 32 位 JDK,我不再有那个错误,但是我告诉你的那个错误。 Jdk 是 32 位的。

标签: java c dll path


【解决方案1】:

似乎图书馆链接没有正确完成。 System.loadLibrary 中存在问题。因为它无法显示所需的方法。

这些是在Java中使用本机代码的要求,我不知道哪些没有被观察到:

首先,确保native文件正确,getval方法必须在那个dll中,名称、输入和输出规范完全一致。

其次,它就是专门为这个用途而编译的。

最后一个方向正确,名字正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    相关资源
    最近更新 更多