2013-07-14 21 views
9

Ich benutze cmake 2.8.7 auf Ubuntu 12.04 amd64. Die installierten OpenJDK JRE Komponenten in meinem System sind nachfolgend aufgeführt:cmake find_package (JNI) funktioniert nicht in Ubuntu 12.04 amd64

$ 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) 

Allerdings bin ich nicht die OpenJDK JRE-Komponenten. Ich habe Oracle Java 7 JDK in "/usr/lib/jvm/jdk1.7.0_25" manuell installiert und "update-alternatives" verwendet, um "java" auf mein installiertes Oracle Java 7 JDK zu verweisen. Ich habe keine "JAVA_HOME", "JAVA_BIN", "CLASSPATH" Umgebungsvariablen gesetzt und das manuell installierte Oracle Java 7 JDK scheint in Eclipse 4.3 OK zu sein.

Das Problem ist, dass, wenn ich "find_package (JNI)" in Cmake verwenden und verwenden Sie die "message()" Funktion die JNI Variablen zu zeigen, ich habe folgendes Ergebnis:

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 

Die „find_package (JNI) "scheint einige der Java-Komponenten zu finden, die mit der OpenJDK-JRE verwandt sind, und konnte meine aktuellen Oracle Java 7-JDK-Komponenten, auf die" update-alternatives "verweist, nicht finden.

Ich möchte wissen, dass es einen Fehler in der "FindJNI.cmake" -Datei gibt und was ich in der Oracle Java 7 JDK-Einrichtung verpasst habe, so dass cmake "find_package (JNI)" richtig funktionieren könnte.

Danke für jeden Vorschlag.

Antwort

22

Sie können FindJNI.cmake manuell ändern, um das installierte JDK leichter finden zu können. Sehen Sie diesen Kern:

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

Es ist schade, dieses Skript nicht aktualisiert worden ist, aber vielleicht keine Überraschung gegeben, dass CMake ist eine solche Katastrophe.

EDIT: Eine einfachere Lösung ist JAVA_HOME richtig einzustellen. Mit OpenJDK 7 installiert, habe ich es mit:

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

+0

Ändern 'FindJNI.cmake' behoben das Problem mit mir .. danke. –

+2

Äh ... Was ist verhängnisvoll an CMake? –

4

Wenn Sie Oracle JDK 7 auf Ihrem System installiert haben, wie mein Fall war, könnte man in die Probleme laufen, während opencv Gebäude. Um diese Probleme zu lösen, musste ich die Datei /usr/share/cmake-2.8/Modules/FindJNI.cmake editieren. In dieser Datei habe ich die Zeilen mit den Verweisen auf openjdk und die Standardwerte und die hinzugefügten Referenzen von oracle jdk 7 auskommentiert, wie unten gezeigt.

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 
) 

und in dem Abschnitt, wo das Skript für Bibliothek enthalten sieht ...

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 
) 

Dann folgte ich genaue Anweisungen, um die OpenCV für Android zu bauen.

Ich musste openjdk und default-bezogene Zeilen auskommentieren, da sie mit Oracle-Installationen in Konflikt standen.

Verwandte Themen