2013-07-14 14 views
9

私はUbuntu 12.04 amd64でcmake 2.8.7を使用しています。私のシステムでのインストールのOpenJDK JREのコンポーネントは次のとおりです。Ubuntu 12.04 amd64でcmake find_package(JNI)が動作しない

$ sudo dpkg --list | grep jdk 
openjdk-6-jre 6b27-1.12.5-0ubuntu0.12.04.1 OpenJDK Java runtime, using Hotspot JIT 
openjdk-6-jre-headless 6b27-1.12.5-0ubuntu0.12.04.1 OpenJDK Java runtime, using Hotspot JIT (headless) 
openjdk-6-jre-lib 6b27-1.12.5-0ubuntu0.12.04.1 OpenJDK Java runtime (architecture independent libraries) 

しかし、私はOpenJDKのJREコンポーネントを使用していません。私はOracle Java 7 JDK を "/usr/lib/jvm/jdk1.7.0_25"に手動でインストールし、インストールされたOracle Java 7 JDKに "java"を指すために "update-alternatives"を使用しました。私は "JAVA_HOME"、 "JAVA_BIN"、 "CLASSPATH"環境変数を設定しておらず、手動でインストールされたOracle Java 7 JDKはEclipse 4.3で正常に動作するようです。

Could NOT find JNI (missing: JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH) 
JNI_FOUND = FALSE 
JNI_LIBRARIES = /usr/lib/jvm/java-6-openjdk/jre/lib/amd64/libjawt.so;/usr/lib/jvm/java-6-openjdk/jre/lib/amd64/server/libjvm.so 
JAVA_INCLUDE_PATH = JAVA_INCLUDE_PATH-NOTFOUND 
JAVA_INCLUDE_PATH2 = JAVA_INCLUDE_PATH2-NOTFOUND 
JAVA_AWT_INCLUDE_PATH = JAVA_AWT_INCLUDE_PATH-NOTFOUND 
JAVA_JVM_LIBRARY = /usr/lib/jvm/java-6-openjdk/jre/lib/amd64/server/libjvm.so 
JAVA_AWT_LIBRARY = /usr/lib/jvm/java-6-openjdk/jre/lib/amd64/libjawt.so 
JNI_INCLUDE_DIRS = JAVA_INCLUDE_PATH-NOTFOUND;JAVA_INCLUDE_PATH2-NOTFOUND;JAVA_AWT_INCLUDE_PATH-NOTFOUND 

「find_package:

問題は、私は「find_package(JNI)」cmakeの内とJNI変数を表示するには「メッセージ()」関数を使用するを使用する場合、私は次の結果を持っているということです(JNI)」は、OpenJDK JREに関連するJavaコンポーネントの一部を見つけることができ、現在のOracle Java 7 JDKコンポーネントが "update-alternatives"で指し示されていないことがあります。

「FindJNI.cmake」ファイルにバグがあり、Oracle Java 7 JDKの設定で欠落しているため、cmakeの「find_package(JNI)」が正しく機能することがわかりました。

ありがとうございます。

答えて

22

FindJNI.cmakeを手動で変更して、インストールされているJDKを見つけることができます。 この主旨を参照してください:

https://gist.github.com/emchristiansen/6845954

それは、このスクリプトが更新されていない残念だが、しかし、そうでないかもしれないcmakeのは、このような災害であることを考えると驚き、。

EDIT:より簡単な解決策は、JAVA_HOMEを適切に設定することです。お使いのシステムにインストールされたOracle JDK 7を持っている場合はOpenCVのを構築しながら、私の場合だったとして、あなたが問題に遭遇するかもしれません

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

+0

'FindJNI.cmake'が私の問題を修正しました。ありがとうございます。 –

+2

Er .... CMakeについて何が悲惨ですか? –

4

:インストールのOpenJDK 7で は、私はそれを設定します。これらの問題を解決するために、/usr/share/cmake-2.8/Modules/FindJNI.cmakeファイルを編集しなければなりませんでした。このファイルでは、openjdkへの参照とデフォルトのコメントをコメントアウトし、以下に示すようにoracle jdk 7の参照を追加しました。

JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES 
    ${_JAVA_HOME}/jre/lib/{libarch} 
    ${_JAVA_HOME}/jre/lib 
    ${_JAVA_HOME}/lib 
    ${_JAVA_HOME} 
    /usr/lib 
    /usr/local/lib 
    /usr/lib/jvm/java/lib 
    /usr/lib/java/jre/lib/{libarch} 
    /usr/lib/jvm/jre/lib/{libarch} 
    /usr/local/lib/java/jre/lib/{libarch} 
    /usr/local/share/java/jre/lib/{libarch} 
    /usr/lib/j2sdk1.4-sun/jre/lib/{libarch} 
    /usr/lib/j2sdk1.5-sun/jre/lib/{libarch} 
    /opt/sun-jdk-1.5.0.04/jre/lib/{libarch} 
    /usr/lib/jvm/java-6-sun/jre/lib/{libarch} 
    /usr/lib/jvm/java-1.5.0-sun/jre/lib/{libarch} 
    /usr/lib/jvm/java-6-sun-1.6.0.00/jre/lib/{libarch}  # can this one be removed according to #8821 ? Alex 
    #/usr/lib/jvm/java-6-openjdk/jre/lib/{libarch}  # Commented by Atul 
    #/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/{libarch}  # fedora 
    # Debian specific paths for default JVM 
    #/usr/lib/jvm/default-java/jre/lib/{libarch}  # Commented by Atul 
    #/usr/lib/jvm/default-java/jre/lib   # Commented by Atul 
    #/usr/lib/jvm/default-java/lib    # Commented by Atul 
    # OpenBSD specific paths for default JVM 
    /usr/local/jdk-1.7.0/jre/lib/{libarch} 
    /usr/local/jre-1.7.0/lib/{libarch} 
    /usr/local/jdk-1.6.0/jre/lib/{libarch} 
    /usr/local/jre-1.6.0/lib/{libarch} 
    /usr/lib/jvm/java-7-oracle/jre/lib/{libarch} # This is added Atul 
) 

とスクリプトライブラリを含める探しセクションで...

set(JAVA_AWT_INCLUDE_DIRECTORIES 
    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/include" 
    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/include" 
    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\${java_install_version};JavaHome]/include" 
    ${_JAVA_HOME}/include 
    /usr/include 
    /usr/local/include 
    /usr/lib/java/include 
    /usr/local/lib/java/include 
    /usr/lib/jvm/java/include 
    /usr/lib/jvm/java-6-sun/include 
    /usr/lib/jvm/java-1.5.0-sun/include 
    /usr/lib/jvm/java-6-sun-1.6.0.00/include  # can this one be removed according to #8821 ? Alex 
    #/usr/lib/jvm/java-6-openjdk/include 
    /usr/local/share/java/include 
    /usr/lib/j2sdk1.4-sun/include 
    /usr/lib/j2sdk1.5-sun/include 
    /opt/sun-jdk-1.5.0.04/include 
    # Debian specific path for default JVM 
    #/usr/lib/jvm/default-java/include 
    # OpenBSD specific path for default JVM 
    /usr/local/jdk-1.7.0/include 
    /usr/local/jdk-1.6.0/include 
    /usr/lib/jvm/java-7-oracle/include 
) 

は、その後、私はアンドロイドのためのOpenCVを構築するための正確な指示に従いました。

私は、openjdkとデフォルト関連の行を、オラクルのインストールと競合していたのでコメントアウトする必要がありました。

関連する問題