如何使用命令行在 Linux 下使用 Java 构建 OpenCV?(将在 MapReduce 中使用它)
最近我正在为我的毕业项目尝试 OpenCV.我在 Windows 环境下取得了一些成功.并且因为 OpenCV 的 Windows 包附带了预构建的库,所以我不必担心如何构建它们.但是由于该项目假设运行在一个集群上,每个节点都使用 CentOS 作为主机操作系统,所以我必须知道如何正确编译,并在 Linux 环境下运行这些库.
Recently I'm trying OpenCV out for my graduation project. I've had some success under Windows enviroment. And because with Windows package of OpenCV it comes with pre-built libraries, so I don't have to worry about how to build them. But since the project is suppose to run on a cluster with CentOS as host OS for each node, I have to know how to correctly compile, and run these library under Linux enviroment.
我已经使用 VirtualBox 设置了一个 VM,并在其上安装了 Ubuntu 13.04.但到目前为止,我仍然找不到调整 CMakeList 设置以使 Java 成为构建目标的方法.(一个 jar 和一个本地库,因此我可以在 MapReduce 程序中导入和使用它们)以下是OpenCV桌面Java官方教程
I've set up a VM with VirtualBox and installed Ubuntu 13.04 on it. But so far I still can't find a way to adjust the settings of CMakeList to make Java a build target. (A jar, and a native library so I can import and use them in MapReduce program) Following is the official tutorial of desktop Java for OpenCV
http://docs.opencv.org/doc/tutorials/介绍/desktop_java/java_dev_intro.html
关于编译的部分非常简短.所以我还是不太明白.是因为我错过了对 Java 的一些依赖吗?我已经安装了 JVM(Jre-7u7).还是因为我没有正确配置CMakeList.txt?
The part about the compiling is pretty brief. So I still can't quite understand it. Is it because I missed some dependency for Java? I've already got JVM(Jre-7u7) installed. Or is it because I didn't configure CMakeList.txt correctly?
这是我到目前为止所做的事情,除了它是一个完全干净的 Ubuntu
Here is the things I've done so far, other than that it's a complete clean Ubuntu
- 安装的vim
- 已安装 g++
- 已安装 cmake
- 安装了 cmake-curses-gui
- 已安装 java7 JVM
- 下载适用于 Linux 的 OpenCV 包
目标环境为CentOS集群,每个节点的宿主操作系统为CentOS,项目为MapReduce程序.
The target enviroment is Cluster with CentOS as host OS for each node, and the project is a MapReduce program.
提前致谢.
推荐答案
可能你缺少的是 ant
,它是一个面向 java 的构建工具.
Probably what you're missing is ant
, which is a java oriented build tool.
你去的时候:
cmake -D BUILD_SHARED_LIBS=OFF ../opencv-2.4.5/
(即您为机器配置 make 的位置),检查是否有 java 部分.它应该这样说(可能有不同的路径/版本):
(i.e. where you're configuring the make for your machine), check for the section that says java. It should say something like this (possibly with different paths/versions):
-- 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 时,我有这个:
When I first ran cmake, I had this:
-- Java:
-- ant: NO
-- JNI: NO
-- Java tests: YES
这表明它找不到 ant
,因此它没有创建 .jar 文件.我只是使用存储库中的版本:
Which indicated it couldn't find ant
, and so it didn't create a .jar file.
I simply use the version that's in the repository:
sudo apt-get install ant
我再次运行 cmake,使用上述选项,得到了 ant 的路径(我免费获得了 JNI!).
I ran cmake again, with the above options, which got the path to ant (and I got JNI for free!).
注意:您可能需要相当仔细地阅读 cmake 的输出,因为它会告诉您它将在您的机器上构建什么,并且您可能缺少一些库.
Note: You probably want to read the output of cmake fairly carefully as it tells you what it's going to build on your machine, and you may have some missing libraries.
如果您发现 JNI 仍然丢失.
cmake是(主要是?首先?方便?可以解释为?)寻找jni.h,具体应该是$JAVA_HOME/include/jni.h
所以需要设置$JAVA_HOME到你的 jdk 的主文件夹.
cmake is (mostly? first? conveniently? can be interpreted as?) looking for jni.h, which should be specifically $JAVA_HOME/include/jni.h
So you need to set $JAVA_HOME to the home folder of your jdk.
我使用 which javac
和 ls -l
来跟踪一系列符号链接,以识别我的 java 1.7 安装位置.您也可以使用 locate jni.h
并查找树,或者简单地查看 /usr/lib/jvm
或类似内容.
I used which javac
and then ls -l
to follow a series of symbolic links, to identify where my java 1.7 install was. You could also use locate jni.h
and work up the tree, or simply look around /usr/lib/jvm
or similar.
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
你可能想用几个来检查你是否正确
You probably want to check that you've got that right with a couple of
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 文件夹:
Interestingly when I ran the cmake command again, it picked up a different JNI folder:
-- 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
因为这是我下载的代码版本).
Once you've got that, run the make
command. If you watch obsessively, you'll see a bunch of .java files trundle past. Either way you'll end up with a .jar file in the ./bin folder.
(in my case it's called opencv-245.jar
as that's the version of the code I downloaded).
相关文章