带有java.lang.UnsatisfiedLinkError

时间:2019-07-09 03:29:33

标签: javacv

代码非常简单,只需打开一张图片即可。 但是当我运行此程序时,我会遇到如下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.imgcodecs.Imgcodecs.imread_1(Ljava/lang/String;)J
    at org.opencv.imgcodecs.Imgcodecs.imread_1(Native Method)
    at org.opencv.imgcodecs.Imgcodecs.imread(Imgcodecs.java:112)

根据搜索到的解决方案,我将此System.load(Core.NATIVE_LIBRARY_NAME)添加到main(),不起作用:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Expecting an absolute path of the library: opencv_java401
    at java.lang.Runtime.load0(Runtime.java:806)
    at java.lang.System.load(System.java:1086)

或者这个System.loadLibrary(Core.NATIVE_LIBRARY_NAME)仍然无法正常工作:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)

我的项目是通过gradle构建的,依赖项是(官方文档):

compile group: 'org.bytedeco', name: 'javacv-platform', version: '1.5'

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

自我回答。
我的import是错误的。应该是
import static org.bytedeco.opencv.global.opencv_imgcodecs.imread
代替
import static org.opencv.imgcodecs.Imgcodecs.imread
此错误导致使用了错误的软件包。

正确的代码是:

import org.bytedeco.opencv.opencv_core.Mat;
import static org.bytedeco.opencv.global.opencv_imgcodecs.imread;

public class DemoApplication {
    public static void main(String[] args) {
        Mat image = imread("/root/test.png");
        System.out.println("width:" + image.cols());
        System.out.println("height:" + image.rows());
    }
}