UnsatisfiedLinkError:java.library.path中没有opencv_java249

遇到一些问题,在我的mac上运行一段代码。 有人给我写了一个图像分析java应用程序,但我试图在netbeans上运行它时不断收到此错误。

run:线程“main”中的exceptionjava.lang.UnsatisfiedLinkError:在java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)的java.library.path中没有opencv_java249,位于java.lang.Runtime.loadLibrary0(Runtime.java: 870)在java.lang.System.loadLibrary(System.java:1119)at image.prossing.Test.main(Test.java:28)Java结果:1 BUILD SUCCESSFUL(总时间:0秒)

有netbeans项目,并添加必要的jar文件作为库。 程序员告诉我下载正确的OpenCV版本并将opencv.dll文件复制到我的java / jre / bin文件夹中。 但我找不到dll文件或java / jre文件夹。 我知道大多数编程都出现在Windows上是有原因的。 希望有人可以帮我解决这个问题,并在我的Mac上运行此应用程序。

这是代码的第一部分,最有可能创建错误的部分:

/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package image.prossing; /** * * @author Dumith Salinda */ import java.util.ArrayList; import java.util.List; import org.opencv.core.Core; import static org.opencv.core.Core.FONT_HERSHEY_SIMPLEX; import org.opencv.core.Mat; import org.opencv.core.MatOfPoint; import org.opencv.core.Point; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.highgui.Highgui; import org.opencv.imgproc.Imgproc; public class Test { public static void main(String[] args) { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 

对不起,如果不是那么清楚,请告诉我如果缺少或不清楚会添加哪些信息。 真的很感激你能给予的任何帮助。 真诚的Meir Warcel

查看您的OpenCV目录;

举个例子; (使用brew install opencv3 --with-java --with-python3

 /usr/local/Cellar/opencv3/XXX/share/OpenCV/java 

你会看见;

 libopencv_javaXXX.so opencv-XXX.jar 

既然你已经有了OpenCV的Java本机库( libopencv_javaXXX.so ), 那么唯一剩下的就是mac的动态库

libopencv_javaXXX.dylib链接到libopencv_javaXXX.dylib ;

 ln -s libopencv_javaXXX.so libopencv_javaXXX.dylib 

现在将/usr/local/Cellar/opencv3/XXX/share/OpenCV/javaIntelliJ中的本 机库位置或Eclipse中的类似内容。

或者将其添加到JVM参数中;

 -Djava.library.path=/usr/local/Cellar/opencv3/XXX/share/OpenCV/java 

在运行OSX Yosemite的mac上,我将libopencv_java2412.dylib文件放到了/Library/Java/Extensions ,它运行起来了。

构建opencv后,在/ build / lib中生成libopencv_java2412.dylib。

花了很多时间,并使用StackOverflow的不同建议后,我设法获得了Windows的解决方案。 但我也在为mac添加一个解决方案。 希望它应该有效。

  1. 根据您的系统配置加载您的lib。

     private static void loadLibraries() { try { InputStream in = null; File fileOut = null; String osName = System.getProperty("os.name"); String opencvpath = System.getProperty("user.dir"); if(osName.startsWith("Windows")) { int bitness = Integer.parseInt(System.getProperty("sun.arch.data.model")); if(bitness == 32) { opencvpath=opencvpath+"\\opencv\\x86\\"; } else if (bitness == 64) { opencvpath=opencvpath+"\\opencv\\x64\\"; } else { opencvpath=opencvpath+"\\opencv\\x86\\"; } } else if(osName.equals("Mac OS X")){ opencvpath = opencvpath+"Your path to .dylib"; } System.out.println(opencvpath); System.load(opencvpath + Core.NATIVE_LIBRARY_NAME + ".dll"); } catch (Exception e) { throw new RuntimeException("Failed to load opencv native library", e); } } 

2.现在根据需要使用此方法

 public static void main(String[] args) { loadLibraries(); } 

从下面的代码行发生exception:

 System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 

您的程序正在尝试通过调用loadLibrary方法的参数名称加载本机库,而该方法无法定位。 确保将本机库(opencv.dll)放置在java.library.path系统属性中的某个位置,因为JVM会查看这些位置以加载任何本机库(可能不包含’java / jre / bin’) 。

您可以在程序中打印java.library.path ,如下所示:

 System.out.println(System.getProperty("java.library.path")); 

您不能只将Windows库( dll文件)放在Mac上并让它运行 – 您需要先为Mac编译库(或获取该库的Mac版本)。

请参阅此处获取有关如何操作的提示:

.dll等效于Mac OS X.

第三方库如何在Objective-C和Xcode中工作?

如何在Mac OS X中使用带有Java的Windows DLL?

只需在opencv_java249.dll所在的文件夹中添加; 它将类似于C:\bin\opencv\build\java\x32C:\bin\opencv\build\java\x64具体取决于您的机器架构。 问题是java.library.path实际上是path变量。

netebans右键klick项目choosew properti选择运行,工作direktory,单击浏览器更改为opencv文件夹,发布/ lib,