【问题标题】:java.lang.UnsatisfiedLinkError in my java program :(我的 java 程序中的 java.lang.UnsatisfiedLinkError :(
【发布时间】:2010-12-02 14:28:58
【问题描述】:

我创建了一个使用 JNI 的程序。我编译了它,生成了头文件,创建了一个对应的C程序,并为它创建了dll。

我遇到了一个异常:

线程“main”中的异常 java.lang.UnsatisfiedLinkError: D:\examples\FirstJNIExample.dll: 找不到依赖库 在 java.lang.ClassLoader$NativeLibrary.load(Native Method) 在 java.lang.ClassLoader.loadLibrary0(未知来源) 在 java.lang.ClassLoader.loadLibrary(未知来源) 在 java.lang.Runtime.load0(未知来源) 在 java.lang.System.load(未知来源) 在 com.ankur.FirstJNIExample.(FirstJNIExample.java:9) 找不到主类:com.ankur.FirstJNIExample。程序将会退出。

我不知道我的 FirstJNIExample.dll 依赖于哪些所有 dll。

我在 Dependency Walker 中看到我的 dll 依赖于以下 dll: msvcr90.dll kernel32.dll 这个 kernel32.dll 依赖于: ntdll.dll

我还在 Dependency Walker for msvcr90.dll 中看到系统找不到指定文件的错误。

此 dll 存在于我的系统中的以下位置:D:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT

当我想用这样的代码自己加载它时:

enter code here

System.load("D:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT/msvcr90.dll");
System.load("d:/examples/FirstJNIExample.dll");

我收到一个窗口错误:


Microsoft Visual C++ 运行时库

运行时错误!

程序:C:\Windows\system32\java.exe

R6034

应用程序试图错误地加载 C 运行时库。
请联系应用程序的支持团队以获取更多信息。


好的

还有这个例外:

线程“main”中的异常 java.lang.UnsatisfiedLinkError: D:\Program Files\Micr osoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\msvcr90.dll:动态链接库 (DLL) 初始化例程失败 在 java.lang.ClassLoader$NativeLibrary.load(Native Method) 在 java.lang.ClassLoader.loadLibrary0(未知来源) 在 java.lang.ClassLoader.loadLibrary(未知来源) 在 java.lang.Runtime.load0(未知来源) 在 java.lang.System.load(未知来源) 在 com.ankur.FirstJNIExample.(FirstJNIExample.java:10) 找不到主类:com.ankur.FirstJNIExample。程序将会退出。

我只是迷路了。这么多的问题: 为什么我的 dll 依赖于 msvcr90.dll? 我如何加载这个dll?

我以前从未使用过 dll。

【问题讨论】:

    标签: dll java-native-interface


    【解决方案1】:

    您似乎需要一个清单,或切换到静态链接,和/或操作 PATH。

    您在 Windows 上编写的几乎所有 C++ 代码都将使用 MSVC 运行时。默认情况下,该代码是动态链接的。如果您在 JNI DLL 上使用 dumpbin /imports,您将看到依赖关系。

    JRE 调用 LoadLibrary 而不是 LoadLibraryEx,因此将依赖项放在 JNI 库旁边是不够的。您必须在 PATH 中拥有包含 MSVC 运行时 DLL 的目录。或者,您需要静态链接它,但我不确定这对于 MSVC90 是否可行。或者,你需要表现出来。

    【讨论】:

      猜你喜欢
      • 2020-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多