VM 인수로 Java 클래스를 실행해야합니다. Java 응용 프로그램에서 loadLibrary (thirt party DLL)를 시도하고 있습니다. 이를 위해 java.library.path jvm arguement를 설정해야합니다. 나는 다음과 같은 접근법을 시도했다.UnsatisfiedLinkError - Djava.library.path
"C:\Program Files (x86)\Java\jdk1.8.0_92\bin\java" -Djava.library.path=C:\DLL TestMyProgram
위의 명령에서 전체 32 비트 JDK 경로를 지정하는 이유는 64 비트 AMD 플랫폼 그게 전부에 32 비트 DLL을 실행하고 있습니다. 여기
나는 예외
java.lang.UnsatisfiedLinkError: TestMyProgram.group(Ljava/lang/String;Z)Ljava/lang/String;
java.library.path가 preperly 첫 번째 명령에 의해 설정되지 않은 이유는 확실하지 이하 얻고 실행하는 동안. 어떤 도움이라도 대단히 감사합니다.
다음은 네이티브 API 구현 및 mydll.dll
에 수출되고 확인해야합니다, 내 프로그램 예외가 String outStr = group(sb.toString(), false);
에서 throwed 경우
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());
}
}
'라이브러리에로드되지 않음 '추적이 보이지 않으면 DLL이로드 된 것처럼 보입니다. 예외 메시지는 dll에서 찾을 수없는 적절한 진입 점을 암시하는 것으로 보입니다. 너 수출 했니? 올바른 서명이 있습니까? – cma