【发布时间】: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。
【问题讨论】: