2016-12-07 30 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。

感谢。