Cannot find javacv dependent library

I have this code:

package javacv; import static com.googlecode.javacv.cpp.opencv_core.*; import static com.googlecode.javacv.cpp.opencv_imgproc.*; import static com.googlecode.javacv.cpp.opencv_highgui.*; import javax.swing.JOptionPane; /** * * @author (Mahdi) */ public class JavaCv { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here try { IplImage img = cvLoadImage("mehdi.jpg"); cvShowImage("Hellow", img); cvSmooth(img, img, CV_GAUSSIAN, 13); cvShowImage("Blur", img); cvWaitKey(); cvReleaseImage(img); } catch (Exception e) { JOptionPane.showMessageDialog(null, e.getMessage()); } } } 

after starting, run this exception:

 Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Users\(Mahdi)\AppData\Local\Temp\javacpp66820482987315\jniopencv_core.dll: Can't find dependent libraries at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1939) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1864) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1825) at java.lang.Runtime.load0(Runtime.java:792) at java.lang.System.load(System.java:1059) at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:566) at com.googlecode.javacpp.Loader.load(Loader.java:489) at com.googlecode.javacpp.Loader.load(Loader.java:431) at com.googlecode.javacv.cpp.opencv_core.<clinit>(opencv_core.java:136) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:266) at com.googlecode.javacpp.Loader.load(Loader.java:453) at com.googlecode.javacv.cpp.opencv_imgproc.<clinit>(opencv_imgproc.java:97) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:266) at com.googlecode.javacpp.Loader.load(Loader.java:453) at com.googlecode.javacv.cpp.opencv_highgui.<clinit>(opencv_highgui.java:85) at javacv.JavaCv.main(JavaCv.java:23) Caused by: java.lang.UnsatisfiedLinkError: no opencv_core244 in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860) at java.lang.Runtime.loadLibrary0(Runtime.java:845) at java.lang.System.loadLibrary(System.java:1084) at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:593) at com.googlecode.javacpp.Loader.load(Loader.java:481) ... 11 more Java Result: 1 

any idea?

+4
source share
2 answers

Java tries to find the required DLLs in $ {java.library.path} but is not defined. Therefore, you must:

  • Specify the location of opencv_java244.dll in% PATH% (for example, c: \ opencv \ build \ java \ x64 \).
  • Create a dir "lib" project in your directory.
  • Put there:
    • javacpp.jar
    • javacv.jar
    • javacv-windows-x86_64.jar
    • OpenCV-2.4.4-Windows-x86_64.jar
    • Opencv-244.jar

If your platform bit is 32, use the * x86.jar version.

And then you can use this modified ant script from opencv / samples / java / ant / to run your application:

 <project name="JavaCv" basedir="." default="rebuild-run"> <property name="src.dir" value="src"/> <property name="lib.dir" value="lib"/> <path id="classpath"> <fileset dir="${lib.dir}" includes="**/*.jar"/> </path> <property name="build.dir" value="build"/> <property name="classes.dir" value="${build.dir}/classes"/> <property name="jar.dir" value="${build.dir}/jar"/> <property name="main-class" value="${ant.project.name}"/> <target name="clean"> <delete dir="${build.dir}"/> </target> <target name="compile"> <mkdir dir="${classes.dir}"/> <javac includeantruntime="false" srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/> </target> <target name="jar" depends="compile"> <mkdir dir="${jar.dir}"/> <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}"> <manifest> <attribute name="Main-Class" value="${main-class}"/> </manifest> </jar> </target> <target name="run" depends="jar"> <java fork="true" classname="${main-class}"> <classpath> <path refid="classpath"/> <path location="${jar.dir}/${ant.project.name}.jar"/> </classpath> </java> </target> <target name="rebuild" depends="clean,jar"/> <target name="rebuild-run" depends="clean,run"/> 

Or you can define $ {java.library.path} in ant script as follows:

 <target name="run" depends="jar"> <java fork="true" classname="${main-class}"> <sysproperty key="java.library.path" path="PUT_YOUR_PATH_HERE"/> <classpath> <path refid="classpath"/> <path location="${jar.dir}/${ant.project.name}.jar"/> </classpath> </java> </target> 
+3
source

Have you tried extracting the opencv directory as c: \ opencv? This is an easy way to fix this.

0
source

All Articles