我创建了一个使用JNI的程序。我编译了它,生成了头文件,创建了一个相应的C程序,并为它创建了dll。
我遇到了一个例外:
线程“main”中的异常java.lang.UnsatisfiedLinkError:D:\ examples \ FirstJNIExample.dll:找不到依赖库
at java.lang.ClassLoader $ NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
在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中
我还在msncr90.dll的Dependency Walker中看到一个错误,系统无法找到指定的文件。
此dll存在于我的系统中此位置:D:\ Program Files \ Microsoft Visual Studio 9.0 \ VC \ redist \ x86 \ Microsoft.VC90.CRT
当我想在我自己的代码中加载它时,如下所示:
enter code hereSystem.load(“D:/ Program Files/Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT/msvcr90.dll”);
System.load( “d:/examples/FirstJNIExample.dll”);
我收到一个Windows错误:
Microsoft Visual C++运行时库 h2>
运行时错误!
程序:C:\ Windows \ system32 \ java.exe
R6034
应用程序尝试错误地加载C运行时库
请联系应用程序的支持团队以获取更多信息。
确定 H2>
这个例外:
线程“main”中的异常java.lang.UnsatisfiedLinkError:D:\ Program Files \ Micr
osoft Visual Studio 9.0 \ VC \ redist \ x86 \ Microsoft.VC90.CRT \ msvcr90.dll:动态链接库(DLL)初始化例程失败
at java.lang.ClassLoader $ NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
在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。