2016-12-07 59 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?很難相信* all *所需的庫位於相同的目錄中。所以仍然有可能存在一個絕對路徑或對Java中不存在的庫的引用。您應該*檢查*而不是相信。 – Holger

回答

0

我用user2543253s幫助解決了這個問題。

對於JDK 1.8:

  • 需要2個DLL庫(C:\ Program Files文件(x86)的\的Java \ jdk1.6.0_45 \ jre的\ BIN \ plugin2) (2個DLL庫複製到項目路徑)。

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

是這樣工作在1.8。

感謝。