Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 内部调用另一个DLL的JNI DLL的依赖项_Java_C++_Eclipse_Dll_Java Native Interface - Fatal编程技术网

Java 内部调用另一个DLL的JNI DLL的依赖项

Java 内部调用另一个DLL的JNI DLL的依赖项,java,c++,eclipse,dll,java-native-interface,Java,C++,Eclipse,Dll,Java Native Interface,我已经用VisualStudio创建了一个JNI库,用于java应用程序中,这个dll在内部调用另一个dll(openssl)。现在,当我用eclipse加载这个库时,我会得到一个错误,说“找不到依赖库”,除非我将另一个DLL的路径放在path变量上 in thread "main" java.lang.UnsatisfiedLinkError: C:\*****\jniDLL.dll: Can't find dependent libraries at java.lang.ClassL

我已经用VisualStudio创建了一个JNI库,用于java应用程序中,这个dll在内部调用另一个dll(openssl)。现在,当我用eclipse加载这个库时,我会得到一个错误,说“找不到依赖库”,除非我将另一个DLL的路径放在path变量上

in thread "main" java.lang.UnsatisfiedLinkError: C:\*****\jniDLL.dll: Can't find dependent libraries
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1939)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1864)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1854)
    at java.lang.Runtime.loadLibrary0(Runtime.java:845)
    at java.lang.System.loadLibrary(System.java:1084)
    at iwinAlgTest.test.<clinit>(test.java:7)
但是沃克说

(jniDLL --> depends on myDLL.exe) not myDLL.dll

注意:起初它是一个win32应用程序(输出myDLL.exe),但我将项目设置更改为输出myDLL.dll,然后我创建了另一个项目,从myDLL.dll创建一个JNI dll,我用c++

编写了该项目,一种绕过此问题的方法是在加载myDLL之前加载openssl.dll,因此,myDLL将在尝试启动时找到加载的符号

其他解决方法:

  • 将openssl.dll添加到路径(您已经提到了这一点)
  • 安装时在system32中复制openssl
  • 将openssl放在与可执行文件路径相同的文件夹中
但是,这仅适用于Windows


在linux中,您必须更改.so中的rpath(但我认为这超出了范围)。

和libeay32.lib等lib文件在运行时不使用。它们仅在构建过程中使用。将DLL添加到path环境变量指定的路径中,看看这是否解决了问题。如果将新目录添加到路径中,则可能需要重新启动Eclipse才能产生效果。
(jniDLL --> depends on myDLL.exe) not myDLL.dll