2016-09-14 4 views
0

VM引数を使用してJavaクラスを実行する必要があります。私はJavaアプリケーションからloadLibrary(thirtパーティ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のパスを指定するThatsなぜ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のエクスポートされません。

関連する問題