java - 无法在 Linux 上加载 OpenCV - undefined symbol 错误

标签 java linux opencv debian

所以我想稍微玩一下 OpenCV。我的测试项目是用 Java 编写的(操作系统是 Debian Linux 8.4),我已经按照本教程构建了 OpenCV:https://opencv-java-tutorials.readthedocs.io/en/latest/01-installing-opencv-for-java.html

在解决了几个问题之后,我能够成功构建 OpenCV jar 和 so 文件。构建期间没有错误或警告。我已将 opencv-400.jarlibopencv_java400.so 放入我项目的 lib 子文件夹中。在 Eclipse 中添加 jar 文件到构建路径,并在 Eclipse 的构建配置中放置正确的 so 文件路径。

我的项目只有一个 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 MiB,但我认为这应该不是问题。

如果有任何想法,我将不胜感激!

最佳答案

该错误意味着您的系统没有安装合适的 protobuf 库。您可以尝试 sudo apt install libprotobuf10,但我不能保证会有帮助。

或者,您也可以运行 ldd/home/firzen/ownCloud/develop/java/workspace/CVExperiments/lib/libopencv_java400.so,这将向您显示 OpenCV 尝试导入的所有库 - 也许Protobuf 实际上是与 OpenCV 一起构建的,只是没有安装。

关于java - 无法在 Linux 上加载 OpenCV - undefined symbol 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53545931/

相关文章:

ios - Apple Mach-O 链接器警告直接访问...到全局弱符号

c++ - OpenCV clone() 和 copyTo() 方法不会生成与原始类型相同的 Mat?

java - 如何在主类中扩展JFrame和JPanel?

java - 使用 SuperCSV CSVBeanReader 时在字符串上使用什么单元处理器

regex - 如何在 bash 中删除从开始到某个特定选定单词的文本?

linux - 来自 tar.gz 的 grep 不提取 [更快的一个]

java - 如何从 okhttp 的缓存中删除 url?

java - 在javafx中用按钮覆盖标签背景

c++ - 在centos上打开gcc

xcode - XCode中的OpenCV -cmake错误