最近我正在为我的gradle作品尝试OpenCV。 我在Windows环境下取得了一些成功。 而且,由于OpenCV的Windows包含了预构build的库,所以我不必担心如何构build它们。 但是因为这个项目是假设在CentOS上作为每个节点的主机操作系统运行,所以我必须知道如何在Linux环境下正确编译和运行这些库。
我已经用VirtualBox设置了一个虚拟机,并安装了Ubuntu 13.04。 但到目前为止,我仍然无法find一种方法来调整CMakeList的设置,使Java成为构build目标。 (一个jar子和一个本地库,所以我可以在MapReduce程序中导入和使用它们)以下是OpenCV的桌面Java官方教程
http://docs.opencv.org/doc/tutorials/introduction/desktop_java/java_dev_intro.html
关于编译的部分非常简短。 所以我还是不太明白。 是因为我错过了Java的一些依赖吗? 我已经安装了JVM(Jre-7u7)。 或者是因为我没有正确configurationCMakeList.txt?
这是我迄今为止所做的事情,除了这是一个完整的干净的Ubuntu
目标环境是CentOS作为每个节点的主机操作系统,该项目是一个MapReduce程序。
提前致谢。
可能你错过的是ant
,这是一个面向Java的构建工具。
当你去:
cmake -D BUILD_SHARED_LIBS=OFF ../opencv-2.4.5/
(即你在哪里配置你的机器),检查部分说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
因为这是我下载的代码的版本)。
对于有人从谷歌导向这里:
如果在运行java教程后JRE崩溃,那么很可能还会安装Python Bindings(cv2.so)。 您将不得不重新制作OpenCV而不使用这些绑定
cmake -DBUILD_SHARED_LIBS=OFF -D BUILD_NEW_PYTHON_SUPPORT=NO
这解决了我的问题。
我试图在Ubuntu 14上构建OpenCV 3,并遇到类似Oracle Java 8 JDK的问题。
这些是我为了使用java OpenCV绑定构建和运行java程序而执行的步骤。
FindJNI。 由于cmake 3的“FindJNI”模块不支持检测Oracle Java 8,我们必须手动添加我们的Java 8目录。 因此,找到cmake目录下的/home/foo/bar/cmake-3.2.2-Linux-x86_64/share/cmake-3.2/modulees/FindJNI.cmake
文件,例如/home/foo/bar/cmake-3.2.2-Linux-x86_64/share/cmake-3.2/modulees/FindJNI.cmake
转到JAVA_APPEND_LIBRARY_DIRECTORIES
变量并将路径添加到您的java lib体系结构目录中,例如/home/foo/bar/jdk1.8.0_45/lib/amd64
转到JAVA_AWT_INCLUDE_DIRECTORIES
变量并将路径添加到您的java包含目录,例如/home/foo/bar/jdk1.8.0_45/include
建立。 如果修改后的FindJNI发现了您的Oracle 8 JDK,那么共享库标志将会触发java绑定的构建。
cd /home/foo/bar/opencv-3.0.0/ mkdir build cd build # install dependencies if needed, see [1] cmake -DBUILD_SHARED_LIBS=OFF .. make -j
写测试代码。 在你的build
目录下,你应该看到一个像./bin/opencv-300.jar
这样的jar文件。 这个文件可以添加到你的Java构建依赖,例如在你最喜欢的IDE。
运行测试代码。 您必须将opencv lib路径添加到VM选项中:
-Djava.library.path = /家庭/富/酒吧/ OpenCV的-3.0.0 /编译/ lib目录
[1]注意:根据您的个人需求或口味,您可以在构建之前安装各种其他依赖项,例如比较http://rodrigoberriel.com/2014/10/installing-opencv-3-0-0-on-ubuntu-14 -04 /
从OpenCV 3.1.0版本开始,在OpenCV_Root_Directory/platforms/maven
下有一个Maven POM项目。 在你的Linux机器上安装Maven(使用包管理器或手动安装),这个项目将确保你有正确的依赖安装,建立本地和Java库。 请参阅上述目录中的自述文件。