【问题标题】:NoClassDefFound error because of System.loadLibrary(Core.NATIVE_LIBRARY_NAME)由于 System.loadLibrary(Core.NATIVE_LIBRARY_NAME) 导致 NoClassDefFound 错误
【发布时间】:2015-01-21 12:32:01
【问题描述】:

我正在尝试使用 opencv 2.4.9。使用 maven,我有两个文件 - 第一个是 maven 项目中的 java 文件,第二个是包含所有 opencv 导入的 java 文件,但这个文件在同一个包中,我正在调用第一个 java 文件的第二个函数。 这两个文件作为java项目单独运行良好但是当我尝试运行完整的maven项目时它会抛出这个错误 - (java.lang.NoClassDefFoundError: org/opencv/core/Core)

构建失败。

经过大量研究,我发现问题主要是因为 System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 用于加载 opencv 库。 为了纠正这个问题,有一些解决方案可以将 opencv.dll 添加到 java 文件夹,但由于我正在工作 os x 10.9.5,我没有 dll,因为它们在opencv 下的 build 文件夹,但 build 文件夹只有在我们安装了 opencv 后才会出现,而且我找不到 opencv 的 .dmg 文件。我该怎么办?

PS:这是我在 SO 上的第一篇文章。

【问题讨论】:

    标签: java android eclipse maven opencv


    【解决方案1】:

    经过大量的尝试和尝试,直接在System.loadLibrary("Complete Path to opencv.dll")中指定opencv.dll的路径似乎已经成功了,但是在 Mac 中,问题仍然存在,因为我在 Mac 中没有任何用于 opencv 的 .dll 或 .so 或 .dylib。

    【讨论】:

      【解决方案2】:

      虽然我没用过opencv:

      有一个从opencv下载的Mac OS X

      我想在 Mac OS X 的 opencv 包中应该有一个 opencv.dll 等效本机库(opencv.jnilib?),并使用 System.loadLibrary 加载它可以解决问题。

      有一篇文章如何在 Mac OS X 上加载原生库。


      可能相关:

      【讨论】:

      • 快速搜索显示opencv.jnilib如github.com/Tkres/DC32_MConvo/tree/master/libraries/OpenCV(不确定这是安全的,所以请确定)。
      • 嘿!感谢您的回答,我遵循了该教程中给出的所有步骤,但是在完成每个步骤后我得到了这个:(java.lang.UnsatisfiedLinkError:/Library/Java/Extensions/libOpenCV.jnilib:dlopen(/Library/Java/Extensions/ libOpenCV.jnilib, 1): 没有找到合适的图像. 找到了: /Library/Java/Extensions/libOpenCV.jnilib: 未知文件类型, 前八个字节: 0x0A 0x0A 0x0A 0x0A 0x3C 0x21 0x44 0x4F) 似乎.jnilib 无法识别.我希望你能帮忙。
      • 除此之外,我无法理解第四步是干什么用的?我具体如何使用它?
      • 不知道代码是怎么写的,库放在哪里,从哪里获取库,所以情况有点难以理解……如果代码像System.loadLibrary(" libOpenCV.jnilib"),后缀部分 .jnlib 不应该被指定,我想。无论如何,需要更多细节以其他人可能能够重现该问题...
      【解决方案3】:

      这是一个老问题,但还没有答案。对于解决 System.loadLibrary(Core.NATIVE_LIBRARY_NAME) 问题的我来说:https://stackoverflow.com/a/35112123

      【讨论】:

      • 我不确定你的意思?你能详细说明一下吗?您的意思是链接的 Stack Overflow 问题为您解决了类似的问题吗?
      • 在 Windows 上可以指定 dll 的路径,在 MAC 上则没有。因此,为了修复在 MAC 中使用 System.loadLibrary(Core.NATIVE_LIBRARY_NAME) 时出现的错误,我使用 brew install opencv3 --with-java --with-python3 下载并编译了 opencv。它将安装在 /usr/local/Cellar/opencv3/XXX/share/OpenCV/java 链接 libopencv_javaXXX.so 到 libopencv_javaXXX.dylib: ln -s libopencv_javaXXX.so libopencv_javaXXX.dylib 现在添加 /usr/local/Cellar/opencv3/ XXX/share/OpenCV/java 作为 Native
      【解决方案4】:

      对于 Ubuntu Linux,我遇到了类似的问题,即找不到实际上是 libopencv_javaxxx.so 的本机库(xxx 是版本) 它实际上安装在 /usr/lib/jni/ 下,不像安装在 /usr/lib/x86_64-linux-gnu/ 下的其他本机库

      我对原生库的第一个想法是 libopencv_core.so,根本没有 libopencv.so。

      【讨论】:

        【解决方案5】:

        看看 Unsupported platform in nu.pattern 和我对openCV Java on Kotlin 的建议回答,它展示了如何使用nu.pattern.OpenCV.loadShared(); API。

        【讨论】:

          猜你喜欢
          • 2021-05-08
          • 2013-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多