问题
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:
- Set location of opencv_java244.dll in %PATH% ("c:\opencv\build\java\x64\" for example).
- Create in your project dir "lib" dir.
- 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