0

There is an issue running openCV 3.1(Also tried with 3.0) in Windows7 x64 from console.

Sample code is this one:

package com.company;
import org.opencv.core.Core;
import org.opencv.core.Mat;

public class Main {

    public static void main(String[] args) {
    // write your code here
        System.out.println("Entering Main");
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        System.out.println("Creating Mat");
        new Mat();
        System.out.println("Finished successfully");
        }
}

I can run this project in IDEA IDE without any problems. Full output:

"C:\Program Files\Java\jdk1.8.0_102\bin\java" -Dvisualvm.id=11658625891829 -Djava.library.path=D:\opencv310\opencv\build\java -Didea.launcher.port=7536 "-Didea.launcher.bin.path=D:\progs\IntelliJ IDEA 14.1.4\bin" -Dfile.encoding=windows-1252 -classpath "C:\Program Files\Java\jdk1.8.0_102\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\zipfs.jar;C:\Users\mrk\IdeaProjects\TestOpencvError\out\production\TestOpencvError;D:\opencv310\opencv\build\java\opencv-310.jar;D:\progs\IntelliJ IDEA 14.1.4\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain com.company.Main

Entering Main

Creating Mat

Finished successfully

Process finished with exit code 0

But when I compile the source and try to launch .class from console

java -Djava.library.path=D:\ com.company.Main

(I have copied opencv310.dll to root of my D drive and jar file to java/lib/ext to be sure it is found) I get the following output:

Entering Main

Creating Mat

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n

_Mat()J

at org.opencv.core.Mat.n_Mat(Native Method)

at org.opencv.core.Mat.(Mat.java:24)

at com.company.Main.main(Main.java:13)

Which means that DLL is loaded but there is no method n_Mat found. As a proof, when launched without the -Djava.library.path flag the output changes to the following

Entering Main

Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java310 in java.library.path

at java.lang.ClassLoader.loadLibrary(Unknown Source)

at java.lang.Runtime.loadLibrary0(Unknown Source)

at java.lang.System.loadLibrary(Unknown Source)

at com.company.Main.main(Main.java:11)

I have tried to launch the app with IDEA's parameters, that is

java -Dvisualvm.id=11658625891829 -Djava.library.path=D:\opencv310\opencv\build\java -Didea.launcher.port=7536 "-Didea.launcher.bin.path=D:\progs\IntelliJ IDEA 14.1.4\bin" -Dfile.encoding=windows-1252 -classpath "C:\Program Files\Java\jdk1.8.0_102\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_102\jre\lib\ext\zipfs.jar;C:\Users\mrk\IdeaProjects\TestOpencvError\out\production\TestOpencvError;D:\opencv310\opencv\build\java\opencv-310.jar;D:\progs\IntelliJ IDEA 14.1.4\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain com.company.Main

but still got the same error.

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n

_Mat()J

at org.opencv.core.Mat.n_Mat(Native Method)

at org.opencv.core.Mat.(Mat.java:24)

at com.company.Main.main(Main.java:13)

I want to stress once again: code works fine when is being run from within the IDE. The error only shows in console.

There are several similar topics on the net but generally it is the missed -D*library flag issue. I have shown that it is not the case for me OpenCV + Java = UnsatisfiedLinkError Javacv UnsatisfiedLinkError in windows 7

This topic has a link to probably solve the issue using javah tool but I don't find it appropriate for my case since launching from IDE works without correcting headers. UnsatisfiedLInkError Eclipse JNI (works from command line but not in Eclipse) package names

I have tried building jar in IDEA too but it resulted in the same error

What steps could I try to get the code running from the console? What is that extra-something that is being done by IDE that is hidden from the user which makes this big difference?

Community
  • 1
  • 1
  • UPDATE: seems like it's the issue with package naming. My package is com.company which means that in runtime dll java is looking for methods with prefix Java_com_company*. While openCV is complied with prefix Java_org_opencv*. However it does not explain why it works from within IDE and appears only when run from command line – No Ney Never Oct 09 '16 at 13:27
  • UPDATE: same behaviour when building using ant from OpenCV guide http://docs.opencv.org/2.4/doc/tutorials/introduction/desktop_java/java_dev_intro.html – No Ney Never Oct 13 '16 at 22:20

0 Answers0