Не удается загрузить OpenCV в Linux - неопределенная ошибка символа - PullRequest
0 голосов
/ 29 ноября 2018

Так что я бы хотел немного поиграть с OpenCV.Мой тестовый проект на Java (ОС - Debian Linux 8.4), и я следовал этому руководству для сборки OpenCV: https://opencv -java-tutorials.readthedocs.io / en / latest / 01-Установка-OpenCV-для-java.html

После исправления нескольких проблем я смог успешно собрать файл OpenCV jar и т. д.Во время сборки не было ошибок или предупреждений.Я поместил opencv-400.jar и libopencv_java400.so в lib подпапку моего проекта.Добавлен jar-файл для построения пути в Eclipse и правильного пути к файлу so в конфигурациях сборки Eclipse.

В моем проекте есть только класс Main, который является примером, который я нашел в исходных кодах OpenCV, поэтому ничего сложного:

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;

public class Main {

    public static void main(String[] args) {
        System.out.println("Welcome to OpenCV " + Core.VERSION);
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Mat m  = Mat.eye(3, 3, CvType.CV_8UC1);
        System.out.println("m = " + m.dump());
    }
}

Все выглядит так, что все должно работать нормально, но когда я запускаю проект, я вижу следующее исключение:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/firzen/ownCloud/develop/java/workspace/CVExperiments/lib/libopencv_java400.so: /home/firzen/ownCloud/develop/java/workspace/CVExperiments/lib/libopencv_java400.so: undefined symbol: _ZNK6google8protobuf8internal12MapFieldBase28SpaceUsedExcludingSelfNoLockEv
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1938)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1854)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at Main.main(Main.java:9)

И эта часть исключения действительно вызывает у меня беспокойство:

/home/firzen/ownCloud/develop/java/workspace/CVExperiments/lib/libopencv_java400.so: undefined symbol: _ZNK6google8protobuf8internal12MapFieldBase28SpaceUsedExcludingSelfNoLockEv

Мне кажется, что с этим libopencv_java400.so файлом что-то не так.Я прав?Или мне нужны другие файлы, чтобы это работало?Я собрал OpenCV как Debug, так что файл имеет 135 МБ, но я думаю, что это не должно быть проблемой.

Я буду благодарен за любые идеи!

1 Ответ

0 голосов
/ 29 ноября 2018

Эта ошибка означает, что в вашей системе не установлена ​​подходящая библиотека protobuf.Вы можете попробовать sudo apt install libprotobuf10, хотя я не могу гарантировать, что это поможет.

В качестве альтернативы вы также можете запустить ldd /home/firzen/ownCloud/develop/java/workspace/CVExperiments/lib/libopencv_java400.so, который покажет вам все библиотеки, которые OpenCV пытается импортировать - возможно, Protobuf действительнобыл построен вместе с OpenCV, но просто не установлен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...