目录

问题java.lang.UnsatisfiedLinkError-no-jniopencv_core-in-java.library.path

问题:java.lang.UnsatisfiedLinkError: no jniopencv_core in java.library.path

一、问题

今天的程序在一台新电脑上运行,出现java.lang.UnsatisfiedLinkError: no jniopencv_core in java.library.path异常,

具体报错日志:

Exception in thread "Thread-12" java.lang.UnsatisfiedLinkError: no jniopencv_core in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1191)
at org.bytedeco.javacpp.Loader.load(Loader.java:953)
at org.bytedeco.javacpp.Loader.load(Loader.java:854)
at org.bytedeco.javacpp.opencv_core.<clinit>(opencv_core.java:10)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.bytedeco.javacpp.Loader.load(Loader.java:913)
at org.bytedeco.javacpp.Loader.load(Loader.java:854)
at org.bytedeco.javacpp.opencv_imgcodecs.<clinit>(opencv_imgcodecs.java:13)
at com.utils.MatchTemplateUtil.getPicMaxSimValue(MatchTemplateUtil.java:146)
at com.utils.ExcuteUtil.getScrrenshotAndCompare(ExcuteUtil.java:3251)
at com.utils.ExcuteUtil.adbComparePicsJavacv(ExcuteUtil.java:1595)
at com.utils.ExcuteUtil.excuteSingleStep(ExcuteUtil.java:163)
at com.main.widget.ToolsView$4$2$1.run(ToolsView.java:1203)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.UnsatisfiedLinkError: C:\Users\testjavacpp\cache\opencv-windows-x86_64.jar\org\bytedeco\javacpp\windows-x86_64\jniopencv_core.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.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:1171)
... 14 more
Exception in thread "Thread-41" java.lang.NoClassDefFoundError: Could not initialize class org.bytedeco.javacpp.opencv_imgcodecs
at com.utils.MatchTemplateUtil.getPicMaxSimValue(MatchTemplateUtil.java:146)
at com.utils.ExcuteUtil.getScrrenshotAndCompare(ExcuteUtil.java:3251)
at com.utils.ExcuteUtil.adbComparePicsJavacv(ExcuteUtil.java:1595)
at com.utils.ExcuteUtil.excuteSteps(ExcuteUtil.java:405)
at com.main.widget.ToolsView$excuteCaseThread.run(ToolsView.java:4975)

二、分析解决

从日志看,报错的是opencv相关的依赖,这个问题,在旧电脑上是没有出现的,到新电脑才出现,说明应该是环境差异引起的问题,依赖的jar和相关库都打包在程序里了。

查了一下网上的解决方案,都是程序里面库冲突或者缺少库,但是我这里再旧电脑上运行没有问题,所以有点头疼。

然后查看了下新电脑已安装的软件和旧电脑安装软件的区别,发现旧电脑有很多c++的库,但是新电脑因为刚安装的纯净版,什么软件都没装,很干净,下面是旧电脑多安装的c++相关库:

https://i-blog.csdnimg.cn/blog_migrate/29a9f2c712cd65d3ee5643d0d3e748bb.png#pic_center

怀疑是没有安装c++相关环境引起的

搜索:microsoft visual c++

https://i-blog.csdnimg.cn/blog_migrate/4404219c821f1bdc4840f86811ae3b81.png#pic_center

下载:

https://i-blog.csdnimg.cn/blog_migrate/b7f57d3ccf806c9512f1f7c1c1f2b7f2.png#pic_center

直达链接:

安装完后,重新运行软件,问题解决。