最近,我正在为我的毕业设计尝试OpenCV。在Windows环境下,我取得了一些成功。而且由于OpenCV的Windows软件包附带了预构建的库,因此我不必担心如何构建它们。但是由于该项目假设要在CentOS作为每个节点的主机OS的群集上运行,所以我必须知道如何正确编译并在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
目标环境是将每个节点的CentOS用作主机OS的集群,并且该项目是MapReduce程序。
提前致谢。
可能您缺少的是ant,这是一个面向Java的构建工具。
ant
当你去:
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的主文件夹。
$JAVA_HOME/include/jni.h
我使用了which javac然后ls -l遵循了一系列符号链接,以标识我的Java 1.7安装位置。您还可以使用locate jni.h和整理树,或者只是环顾四周/usr/lib/jvm或类似。
which javac
ls -l
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称为是我下载的代码的版本)。
make
opencv-245.jar