can't find dependent library javacv

岁酱吖の 提交于 2019-12-07 11:40:29

问题


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 run throw 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?


回答1:


Java is trying to find required dlls in ${java.library.path} but it is not defined. So you should:

  1. Set location of opencv_java244.dll in %PATH% ("c:\opencv\build\java\x64\" for example).
  2. Create in your project dir "lib" dir.
  3. 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's bitness is 32 then use *x86.jar versions.

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

<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 may define ${java.library.path} in your ant script like this:

<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>



回答2:


Did you try extracting the opencv directory as c:\opencv? That is an easy way to fix this.




回答3:


There is a problem of the version of java cv and OpenCV.

If you use the OpenCV 2.4.7 then you should use the java cv 0.6 and if you use OpenCV 2.4.8 then you should use javacv 0.7.



来源:https://stackoverflow.com/questions/15310129/cant-find-dependent-library-javacv

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!