链接依赖库时java JNI“找不到指定的过程”
以下是基本工作结构:
MainProxy.dll ==> JNIClient.java
使用JNI,我成功地加载了MainProxy。并能够调用本机函数。以下是所需的结构:
Main.dll ==> MainProxy.dll ==> JNIClient.java
但当我的代理。已编译dll并与另一个dll主dll链接。动态链接库系统。loadLibrary(“MainProxy”);呼叫因异常而崩溃
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: MainProxy.dll: The specified procedure could not be found
但是,主代理。dll已成功编译并链接到Main。lib和这两个DLL都放置在java中进行收集
你知道是什么导致了这个问题,以及如何解决这个问题吗
上面是dependencywalker的快照。ISPVPLPR。dll是主要的。dll和LPRPROXY。DLL是主代理。dll。这两者之间的联系看起来很好。CreateNativeClass与其他函数一起从ISPVPLPR导出。dll,而在LPRPROXY中仅导入CreateNativeClass。dll
上面的快照显示了从LPRProxy导出的本机函数。动态链接库
# 1 楼答案
我建议您使用microsoft的Dependency Walker。使用此实用程序可真正检查
MainProxy.dll
是否与Main.dll
正确链接如果Dependency Walker向您显示了一个问题,请告诉我们如何编译和链接
MainProxy.dll
当Dependency Walker向您显示没有问题时,您将不再有
java.lang.UnsatisfiedLinkError
# 2 楼答案
最后,事实证明OpenCV预编译库是问题所在。ISPVPLPR。DLL正在使用OpenCV,复制的DLL是安装程序附带的默认DLL,并且是为WinXP Prof 64位或Win2003 64位编译的。自Opencv_Core241以来。dll需要内核32中的RtlLookupFunctionEntry和RTLvirtualWind函数。dll和这些函数仅为WinXP和Win2003内核32提供。dll版本(MSDN Reference)
解决方案是简单地重新编译OpenCV2。4.1对于Win7,在上帝的祝福下,它成功了