2013-07-14 41 views
9

Tôi đang sử dụng cmake 2.8.7 trên Ubuntu 12.04 amd64. Các thành phần OpenJDK JRE đã cài đặt trong hệ thống của tôi được liệt kê bên dưới:cmake find_package (JNI) không hoạt động trong 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) 

Tuy nhiên, tôi không sử dụng các thành phần JRE OpenJDK. Tôi đã cài đặt bằng tay Oracle Java 7 JDK trong "/usr/lib/jvm/jdk1.7.0_25" và đã sử dụng "các lựa chọn thay thế cập nhật" để trỏ "java" vào Oracle Java 7 JDK đã cài đặt của tôi. Tôi đã không đặt bất kỳ biến môi trường "JAVA_HOME", "JAVA_BIN", "CLASSPATH" và Oracle Java 7 JDK được cài đặt thủ công có vẻ hoạt động tốt trong Eclipse 4.3.

Vấn đề là khi tôi sử dụng "find_package (JNI)" trong cmake và sử dụng "nhắn()" chức năng để hiển thị các biến JNI, tôi có kết quả sau:

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 

Các "find_package (JNI) "dường như có thể tìm thấy một số thành phần Java liên quan đến OpenJDK JRE và không thể tìm thấy các thành phần JDK Oracle Java 7 hiện tại của tôi chỉ bởi" các lựa chọn thay thế cập nhật ".

Tôi muốn biết rằng có bất kỳ lỗi nào trong tệp "FindJNI.cmake" và những gì tôi đã bỏ lỡ trong thiết lập Java Java 7 JDK để cmake "find_package (JNI)" có thể hoạt động bình thường.

Cảm ơn mọi đề xuất.

Trả lời

22

Bạn có thể sửa đổi thủ công FindJNI.cmake để giúp tìm JDK đã cài đặt của bạn. Xem ý chính sau:

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

Đó là một sự xấu hổ kịch bản này chưa được cập nhật, nhưng có lẽ không phải là một sự ngạc nhiên, cho rằng CMake là một thảm họa như vậy.

EDIT: Một giải pháp đơn giản hơn là đặt JAVA_HOME đúng cách. Với OpenJDK 7 được cài đặt, tôi đặt nó với:

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

+0

thay đổi 'FindJNI.cmake' đã khắc phục sự cố với tôi .. cảm ơn. –

+2

Er .... những gì là tai hại về CMake? –

4

Nếu bạn có oracle jdk 7 được cài đặt trên hệ thống của bạn, cũng như trường hợp của tôi, bạn có thể gặp phải vấn đề khi xây dựng opencv. Để giải quyết những vấn đề đó, tôi phải chỉnh sửa, /usr/share/cmake-2.8/Modules/FindJNI.cmake. Trong tập tin này, tôi đã nhận xét các dòng có tham chiếu đến openjdk và các tham chiếu mặc định và được thêm vào của oracle jdk 7 như hình dưới đây.

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 
) 

và trong phần nơi kịch bản tìm kiếm bao gồm thư viện ...

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 
) 

Sau đó, tôi làm theo hướng dẫn chính xác để xây dựng OpenCV cho android.

Tôi đã nhận xét ra openjdk và các dòng liên quan mặc định, vì chúng xung đột với các cài đặt oracle.

Các vấn đề liên quan