JNI"找不到指定的程序"当依赖库链接时

时间:2015-11-11 11:43:26

标签: java c++ java-native-interface

以下是基本工作结构:

  

MainProxy.dll ==> JNIClient.java

使用JNI,我已成功加载MainProxy.dll并能够调用本机函数。以下是必需的结构:

  

Main.dll ==> MainProxy.dll ==> JNIClient.java

但是当MainProxy.dll编译并与另一个DLL Main.dll链接时System.loadLibrary(" MainProxy");呼叫崩溃,异常

Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: MainProxy.dll: The specified procedure could not be found

但是,MainProxy.dll已成功编译并链接到Main.lib,并且这两个DLL都被放置为与java一起收集。

知道是什么导致了这个问题以及如何解决这个问题?

enter image description here

上面是来自dependencywalker的快照。 ISPVPLPR.dll是Main.dll,LPRPROXY.DLL是MainProxy.dll。而这两者之间的联系看起来很好。 CreateNativeClass与ISPVPLPR.dll中的其他函数一起导出,而在LPRPROXY.dll中仅导入CreateNativeClass。

enter image description here

以上快照显示从LPRProxy.dll导出的本机函数

2 个答案:

答案 0 :(得分:1)

最后,事实证明OpenCV预编译库是个问题。 ISPVPLPR.DLL正在使用OpenCV,复制的DLL是设置附带的默认值,并为WinXP Prof 64bit或Win2003 64bit编译。由于Opencv_Core241.dll需要来自Kernel32.dll的RtlLookupFunctionEntry和RtlVirtualUnwind函数,因此这些函数仅针对WinXP和Win2003 Kernel32.dll版本(MSDN Reference)提供。

解决方案很简单,可以为Win7重新编译OpenCV2.4.1并使用GOD祝福它可以工作。

答案 1 :(得分:0)

我建议您使用microsoft的Dependency Walker。使用此实用程序可以真正检查MainProxy.dll是否与Main.dll正确关联。

如果Dependency Walker向您显示问题,请告诉我们您如何编译和链接MainProxy.dll

当Dependency Walker显示您没有问题时,您将不再拥有java.lang.UnsatisfiedLinkError