2013-07-14 11 views
9

Sto usando cmake 2.8.7 su Ubuntu 12.04 amd64. I componenti OpenJDK JRE installati nel mio sistema sono elencati di seguito:cmake find_package (JNI) non funziona 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) 

Tuttavia, io non sto usando i componenti OpenJDK JRE. Ho installato manualmente Oracle Java 7 JDK in "/usr/lib/jvm/jdk1.7.0_25" e ho usato "update-alternative" per puntare "java" sul mio JDK Java 7 installato. Non ho impostato alcuna variabile di ambiente "JAVA_HOME", "JAVA_BIN", "CLASSPATH" e l'Oracle Java 7 JDK installato manualmente sembra funzionare correttamente in Eclipse 4.3.

Il problema è che quando uso "find_package (JNI)" in CMake e utilizzare il "messaggio()" la funzione di visualizzare le variabili JNI, ho il seguente risultato:

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 

Il "find_package (JNI) "sembra che potrebbe trovare alcuni dei componenti Java relativi a OpenJDK JRE e non è stato in grado di trovare i miei attuali componenti JDK di Oracle Java 7 puntati da" update-alternative ".

Voglio sapere che c'è qualche errore nel file "FindJNI.cmake" e cosa mi è mancato nell'installazione JDK di Oracle Java 7 in modo che cmake "find_package (JNI)" possa funzionare correttamente.

Grazie per qualsiasi suggerimento.

risposta

22

È possibile modificare manualmente FindJNI.cmake per trovare il JDK installato. Vedere questo succo:

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

E 'un peccato questo script non è stato aggiornato, ma forse non è una sorpresa, dato che CMake è un tale disastro.

MODIFICA: Una soluzione più semplice è impostare correttamente JAVA_HOME. Con OpenJDK 7 installato, ho impostato con:

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

+0

cambiando 'FindJNI.cmake' risolto il problema con me .. grazie. –

+2

Er .... che cosa è disastroso su CMake? –

4

Se si dispone di Oracle JDK 7 installato sul proprio sistema, come è il mio caso, si potrebbe incorrere in problemi, mentre la costruzione OpenCV. Per risolvere questi problemi, ho dovuto modificare il file /usr/share/cmake-2.8/Modules/FindJNI.cmake. In questo file ho commentato le linee con riferimenti a openjdk e default e ho aggiunto riferimenti a oracle jdk 7 come mostrato di seguito.

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 
) 

e nella sezione in cui lo script cerca includere biblioteca ...

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 
) 

Poi ho seguito le istruzioni precise per costruire l'OpenCV per android.

Ho dovuto commentare openjdk e le righe correlate di default, poiché erano in conflitto con le installazioni di Oracle.

Problemi correlati