确定UnsatisfiedLinkError的根本原因

时间:2015-07-31 21:42:22

标签: java dll

我试图在dll中调用一个函数,但是收到错误 我怎样才能确定它的来源?

protected native String parse(String base, String qualifiedType);
    static {

 try {      
        System.load("c:\\lib\\win32\\parser.dll"); //path is correct
   }catch (Exception e){
        e.getStackTrace();
   }    

}

public void parseFoo(){
    String result = parse (name,baseType);
}
在调用parse时我正在收到:

Exception in thread "main" java.lang.UnsatisfiedLinkError: MyClass.parse(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;

1 个答案:

答案 0 :(得分:0)

根本原因是方法签名。堆栈跟踪将显示在本机方法调用时抛出异常,而不是load(),因此它与DLL路径名无关。

猜测,您在不调整C代码的情况下更改了Java本机方法签名。使用javah重新生成.h文件并调整C代码以使其同意。并确保#include .c文件中的.h文件。