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/java
为IntelliJ中的本 机库位置或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添加一个解决方案。 希望它应该有效。
-
根据您的系统配置加载您的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\x32
或C:\bin\opencv\build\java\x64
具体取决于您的机器架构。 问题是java.library.path
实际上是path
变量。
netebans右键klick项目choosew properti选择运行,工作direktory,单击浏览器更改为opencv文件夹,发布/ lib,