2016-12-07 21 views
0

JavaプロジェクトにC++ JNI DLLをロードします。 JDK 1.6では静かに動作しますが、JDK 1.8の問題があります。 Java 1.8でC++ JNI DLLのロードに変更がありますか?Javaロード時jni dll、JDK 1.8 UnsatisfiedLinkError

私は以下のエラーと結果を添付しました。

JDK 1.8コンソール:

Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\ws-pidion\PidionSDK\oojnidotnet.dll: Can't find dependent libraries 
at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) 
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857) 
at java.lang.Runtime.loadLibrary0(Runtime.java:870) 
at java.lang.System.loadLibrary(System.java:1122) 
at JavaCallNative.<clinit>(JavaCallNative.java:14) 

コード:

File readReturnNativeStringVaueFile; 

static { 
    System.loadLibrary("oojnidotnet"); 
} 

protected void finalize() throws Throwable { 
    super.finalize(); 
} 

public native boolean connect(String paramString); 

同じコードは、JDK 1.6で動作します。

ありがとうございました。

+0

エラーメッセージは、DLLが他のDLLに依存していることを示しています。 DLLにはどのような依存関係がありますか?関連項目[DLLの依存関係をチェックする方法?](http://stackoverflow.com/q/7378959/2711488) – Holger

+0

はい、私は他のDLLの依存関係を知っています。私のプロジェクトと同じディレクトリ。私のプロジェクトはJDK 1.6で動作します。 JDK 1.6とJDK 1.8の違いは何ですか?パスのセキュリティ? –

+0

DLLはJNIとシステムDLLを使用していませんか? *すべての必要なライブラリが同じディレクトリにあると考えるのは難しいです。したがって、絶対パスやJava 8以外のライブラリへの参照が存在する可能性はまだあります。信じる代わりに*をチェックするべきです。 – Holger

答えて

0

私はこの問題をuser2543253sが解決すると解決しました。 JDK 1.8の場合

  • ニード2 DLLのLib(C:\プログラムファイル(x86の)\ Javaの\ jdk1.6.0_45 \ JRE \ビン\のplugin2で) は(2つのDLLのLIBSは、プロジェクトにコピーパス。)

    System.loadLibrary("msvcr71"); 
    System.loadLibrary("npjp2"); 
    
    System.loadLibrary("oojnidotnet"); 
    

それは1.8で、このように動作します。

ありがとうございました。

関連する問題