UnsatisfiedLinkError - Djava.library.path

时间:2016-09-14 11:32:33

标签: java java-ee unsatisfiedlinkerror

需要使用VM参数运行Java类。我正在尝试从Java应用程序loadLibrary(第三方DLL)。为此,我需要设置java.library.path jvm arguement。我尝试了以下方法。

"C:\Program Files (x86)\Java\jdk1.8.0_92\bin\java" -Djava.library.path=C:\DLL TestMyProgram

我在64位AMD平台上运行32位DLL,这就是为什么在上面的命令中指定完整的32位jdk路径。

在这里跑步时我得到的是异常

java.lang.UnsatisfiedLinkError: TestMyProgram.group(Ljava/lang/String;Z)Ljava/lang/String;

不确定为什么java.library.path不是由第一个命令预先设置的。非常感谢任何帮助。

这是我的程序

public class TestMyProgram {

    static
    {
        try {
            System.loadLibrary("mydll");
        } catch (UnsatisfiedLinkError e) {

            System.out.println("Library not loaded" + e);
        }
    }

    public static native String group(String msg, boolean isOracle);

    public static void main(String args[]) {

         StringBuffer sb = new StringBuffer();

         sb.append("mymessage");

         System.out.println("input \n : " + sb.toString());
         String outStr = group(sb.toString(), false);

         System.out.println(new Date());

         System.out.println(outStr);

         System.out.println(new Date());
    }
}

1 个答案:

答案 0 :(得分:0)

如果异常是从String outStr = group(sb.toString(), false);引发的,则应验证本地API是否已在mydll.dll中实施和导出。

执行dumpbin /exports或其他类似工具可以为此提供帮助。这是一个输出样本:

S:\path>dumpbin /exports mydll.dll
Microsoft (R) COFF/PE Dumper Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file mydll.dll

File Type: DLL

  Section contains the following exports for mydll.dll

    00000000 characteristics
           0 time date stamp Thu Jan 01 08:00:00 1970
        0.00 version
           1 ordinal base
           ? number of functions
           ? number of names

    ordinal hint RVA      name

         49    0 0001599C JNI_OnLoad
         48    1 00015C60 JNI_OnUnload
         14    2 0000???? Java_TestMyProgram_group

如果 Java_TestMyProgram_group 未在输出中列出,则不会导出mydll.dll中实现的方法。