15

最近、卒業プロジェクトで OpenCV を試しています。私はWindows環境でいくつかの成功を収めました。また、OpenCV の Windows パッケージにはビルド済みのライブラリが付属しているため、それらをビルドする方法について心配する必要はありません。しかし、このプロジェクトは、各ノードのホスト OS として 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パッケージをダウンロード

対象環境はCentOSを各ノードのホストOSとするClusterで、プロジェクトはMapReduceプログラムです。

前もって感謝します。

4

4 に答える 4

44

おそらく欠けている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 1.7 のインストール先を特定するために、一連のシンボリック リンクを使用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は、ダウンロードしたコードのバージョンであるため、呼び出されます)。

于 2013-06-30T04:06:31.637 に答える