需要使用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());
}
}
答案 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
中实现的方法。