2016-09-14 2 views
0

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()); 
    } 
} 
+0

'라이브러리에로드되지 않음 '추적이 보이지 않으면 DLL이로드 된 것처럼 보입니다. 예외 메시지는 dll에서 찾을 수없는 적절한 진입 점을 암시하는 것으로 보입니다. 너 수출 했니? 올바른 서명이 있습니까? – cma

답변

0

입니다.

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에 implemeted의 익스포트되지 않는다.