有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

链接依赖库时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中进行收集

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

enter image description here

上面是dependencywalker的快照。ISPVPLPR。dll是主要的。dll和LPRPROXY。DLL是主代理。dll。这两者之间的联系看起来很好。CreateNativeClass与其他函数一起从ISPVPLPR导出。dll,而在LPRPROXY中仅导入CreateNativeClass。dll

enter image description here

上面的快照显示了从LPRProxy导出的本机函数。动态链接库


共 (2) 个答案

  1. # 1 楼答案

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

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

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

  2. # 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,在上帝的祝福下,它成功了