我正在开发Eclipse上的Java项目,通过JNI使用C ++ OpenCV库。 一些image processingalgorithm是在本机端用OpenCV实现的,我希望从JNI中使用它们。
我build立了一个C ++ DLL项目来链接到Java,这导致了一个MyLibrary.dll文件。 我使用GCC 6.3编译器编译了OpenCV,并在Eclipse CDT上使用相同的GCC 6.3编译器编译C ++代码(以及MinGW Linker)。 我也检查是否有任何依赖问题使用Dependency Walker 。 到目前为止,我没有错误。
之后,我尝试从Java代码加载库,如下所示:
System.loadLibrary("MyLibrary")
我已经使用-Djava.library.path=pathtoMyLibrary设置path,并确保JVM知道本地库的地址。 我还在MyLibrary.dll旁边添加了所需的OpenCV库。
Directory.Exists保存目录句柄几秒钟
如何输出到当前可见的terminal
在Direct2D中绘制图像的一部分
如何从linux tun / tap读取数据包
通过旧的(非wchar)API函数在非ANSI系统上打开文件
但是,我得到以下错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: MyLibrary.dll: Can't find dependent libraries at java.lang.classLoader$NativeLibrary.load(Native Method) at java.lang.classLoader.loadLibrary0(UnkNown Source) at java.lang.classLoader.loadLibrary(UnkNown Source) at java.lang.Runtime.loadLibrary0(UnkNown Source) at java.lang.System.loadLibrary(UnkNown Source) ...
然后问题消失,当我将依赖的OpenCV库移动到System32文件夹。
我的问题是 我怎么能解决这个问题, 而不移动所需的DLL文件到System32文件夹?
Qt:文件名中的非ASCII字符被replace为'?'
创build一个停止button,以停止在C#窗口窗体应用程序的logging
在应用程序进程死亡/崩溃时终止subprocess
GCC c ++ 11使用大量的RAM,STL位集<UINT_MAX>
文件传输应用程序
System.loadLibrary("opencv_1"); System.loadLibrary("opencv_2"); ...
现在您加载相关的libararies后,可以用同样的方法安全地加载自己的dll文件:
System.loadLibrary("MyFile");
这应该解决can't file dependent libraries错误。
另一个解决方法(没有最佳实践)是将依赖的dll文件(在你的情况下opencv DLL)复制到System32文件夹。
为什么发生这种情况?
我想,当你设置java.library.path参数时,你有责任加载库的依赖库,而不是操作系统本身。 我不确定是否诚实。
正如在JNI项目中如何解决UnsatisfiedLinkError(无法找到依赖库)中所述 ,您可以通过向虚拟机添加-XshowSettings:properties -version参数来检查路径。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。