如何在 Linux 下使用命令行用 Java 构建 OpenCV?(打算在 MapReduce 中使用)

新手上路,请多包涵

最近我正在为我的毕业设计尝试 OpenCV。我在 Windows 环境下取得了一些成功。而且因为 OpenCV 的 Windows 包带有预构建的库,所以我不必担心如何构建它们。但是由于该项目假设在以 CentOS 作为每个节点的主机操作系统的集群上运行,我必须知道如何在 Linux 环境下正确编译和运行这些库。

我已经用 VirtualBox 设置了一个 VM,并在上面安装了 Ubuntu 13.04。但是到目前为止,我仍然找不到调整 CMakeList 的设置以使 Java 成为构建目标的方法。 (一个 jar 和一个本地库,所以我可以在 MapReduce 程序中导入和使用它们)以下是 OpenCV 桌面 Java 的官方教程

http://docs.opencv.org/doc/tutorials/introduction/desktop_java/java_dev_intro.html

关于编译的部分非常简短。所以我还是不太明白。是因为我错过了对 Java 的一些依赖吗?我已经安装了 JVM(Jre-7u7)。还是因为我没有正确配置CMakeList.txt?

这是我到目前为止所做的事情,除了它是一个完全干净的 Ubuntu

  1. 安装了 vim
  2. 安装 g++
  3. 安装cmake
  4. 安装 cmake-curses-gui
  5. 安装了java7 JVM
  6. 下载适用于 Linux 的 OpenCV 软件包

目标环境是Cluster,每个节点的host OS是CentOS,项目是一个MapReduce程序。

提前致谢。

原文由 user2535650 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 598
2 个回答

可能您缺少的是 ant ,这是一个面向 Java 的构建工具。

当你去:

 cmake -D BUILD_SHARED_LIBS=OFF ../opencv-2.4.5/

(即你在哪里为你的机器配置 make ),检查说 java 的部分。它应该是这样的(可能有不同的路径/版本):

 --   Java:
--     ant:                         /usr/bin/ant (ver 1.8.2)
--     JNI:                         /usr/lib/jvm/java-6-openjdk/include /usr/lib/jvm/java-6-openjdk/include /usr/lib/jvm/java-6-openjdk/include
--     Java tests:                  YES

当我第一次运行 cmake 时,我有这个:

 --   Java:
--     ant:                         NO
--     JNI:                         NO
--     Java tests:                  YES

这表明它找不到 ant ,因此它没有创建 .jar 文件。我只是使用存储库中的版本:

 sudo apt-get install ant

我使用上述选项再次运行 cmake,它获得了 ant 的路径(我免费获得了 JNI!)。

注意: 您可能想要相当仔细地阅读 cmake 的输出,因为它告诉您它将在您的机器上构建什么,并且您可能缺少一些库。

如果您发现 JNI 仍然缺失。

cmake 是(主要是?首先?方便地?可以解释为?)寻找 jni.h,具体应该是 $JAVA_HOME/include/jni.h 所以你需要将 $JAVA_HOME 设置为你的 jdk 的主文件夹。

我使用 which javac 然后 ls -l 跟随一系列符号链接,以确定我的 java 1.7 安装位置。您也可以使用 locate jni.h 并在树上工作,或者简单地环顾四周 /usr/lib/jvm 或类似的。

 export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

你可能想用几个来检查你是否做对了

ls $JAVA_HOME/bin/javac
/usr/lib/jvm/java-7-openjdk-amd64/bin/javac

ls $JAVA_HOME/include/jni.h
/usr/lib/jvm/java-7-openjdk-amd64/include/jni.h

有趣的是,当我再次运行 cmake 命令时,它选择了一个不同的 JNI 文件夹:

 --     JNI:                         /usr/lib/jvm/java-7-openjdk-amd64/include /usr/lib/jvm/java-7-openjdk-amd64/include /usr/lib/jvm/java-7-openjdk-amd64/include

完成后,运行 make 命令。如果你看得入迷,你会看到一堆 .java 文件滚过。无论哪种方式,您最终都会在 ./bin 文件夹中得到一个 .jar 文件。 (在我的例子中,它被称为 opencv-245.jar 因为那是我下载的代码版本)。

原文由 GregHNZ 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于从谷歌定向到这里的人:

如果您的 JRE 在运行 java 教程后崩溃,那么很可能您也安装了 python Bindings (cv2.so)。如果没有这些绑定,您将不得不重新制作 OpenCV

cmake -DBUILD_SHARED_LIBS=OFF -D BUILD_NEW_PYTHON_SUPPORT=NO

这为我解决了问题。

原文由 UtsavDrolia 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题