2016-12-07 61 views
0

자바 프로젝트에 C++ JNI DLL을로드합니다. JDK 1.6에서는 조용하게 작동하지만 probelm JDK 1.8이 있습니다. Java 1.8에서 C++ JNI DLL 로딩에 변화가 있습니까?자바로드 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를 들어

:

  • 필요성이 DLL lib 디렉토리 (C : \의 Program Files (x86) \ 자바 \ jdk1.6.0_45 \ JRE \ 빈 \의 plugin2) (2 DLL libs와 프로젝트에 복사 경로는.)

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

은 1.8에서이 방식으로 작동합니다.

감사합니다.