【发布时间】:2014-09-15 19:00:32
【问题描述】:
我已经创建了一个带有 Visual Studio 的 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)
我已经尝试将它添加到 -Djava.library.path 和类路径中,并且我还包含了我的所有 dll 和 openssl dll 以及 libeay32.lib 等 lib 文件,但都没有奏效。有没有办法做到这一点? 我尝试使用 Dependency Walker 检查我的 jniDLL.dll 是否需要任何文件 但我得到有趣的事情: 我真正要做什么来创建我的 jniDLL:
(jniDLL --> calls myDLL.dll) ==> (myDLL.dll --> calls openssl library)
但是 Dependency Walker 这么说
(jniDLL --> depends on myDLL.exe) not myDLL.dll
注意:起初它是一个 win32 应用程序(它输出 myDLL.exe),但我将项目设置更改为输出 myDLL.dll 然后我创建另一个项目以从 myDLL.dll 创建一个 JNI dll,这是我用 c++ 编写的
【问题讨论】:
-
and lib files like libeay32.lib在运行时不使用库文件。它们仅在构建过程中使用。将 DLL 添加到 PATH 环境变量指定的路径中,看看是否能解决问题。如果将新目录添加到 PATH,则可能需要重新启动 Eclipse 才能生效。
标签: java c++ eclipse dll java-native-interface