2012-03-14 29 views
20

Tôi đang cố gắng xây dựng một dự án JNI, nhưng dường như tôi không thể tìm thấy các tiêu đề JNI (ví dụ: jni.h). Tôi đã cài đặt "Gói dành cho nhà phát triển Java OS X 10.7" từ https://developer.apple.com/downloads/.Cách cài đặt tiêu đề phát triển gốc Java trên OS X Lion

Tài nguyên trực tuyến khác nhau đề xuất các tiêu đề phải ở các vị trí như /System/Library/Frameworks/JavaVM.framework/Headers hoặc /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/include, nhưng tôi không thể tìm thấy chúng ở bất cứ đâu - trình cài đặt dường như không tạo chúng.

Tôi thấy các thành phần JDK khác - ví dụ: /System/Library/Frameworks/JavaVM.framework/Commands/javah - nhưng không phải là tiêu đề JNI. Bất kỳ đề xuất?


Cập nhật: technomage chỉ ra rằng Apple bây giờ cài đặt JDK dưới /Library/Java/JavaVirtualMachines, và các tiêu đề JNI đang ở /Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/include/jni.h.

Nhưng tôi vẫn bị mắc kẹt vào mục tiêu thực tế của mình, đó là xây dựng trình bao bọc JNI cho LevelDB (theo hướng dẫn tại github.com/fusesource/leveldbjni). Để trỏ Maven vào đúng JDK, tôi đã thêm /Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/bin vào trước PATH của tôi và đặt JAVA_HOME thành /Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home. Sau khi chugging một lúc, Maven hiện không thành công với:

[INFO] --- maven-hawtjni-plugin:1.5:build (default) @ leveldbjni-osx --- 
[INFO] Extracting /Users/steve/leveldb/leveldbjni/leveldbjni/target/leveldbjni-99-master-SNAPSHOT-native-src.zip to /Users/steve/leveldb/leveldbjni/leveldbjni-osx/target/native-build-extracted 
[INFO] executing: /bin/sh -c ./configure --disable-ccache --prefix=/Users/steve/leveldb/leveldbjni/leveldbjni-osx/target/native-build/target --with-leveldb=/Users/steve/leveldb/leveldb --with-snappy=/Users/steve/leveldb/snappy-1.0.3 --with-universal --with-leveldb=/Users/steve/leveldb/leveldb --with-snappy=/Users/steve/leveldb/snappy-1.0.3 
... 
[INFO] configure: JAVA_HOME was set, checking to see if it's a JDK we can use... 
[INFO] checking if '/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home' is a JDK... no 
[INFO] configure: javac was on your path, checking to see if it's part of a JDK we can use... 
[INFO] checking if '/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home' is a JDK... no 
[INFO] configure: Taking a guess as to where your OS installs the JDK by default... 
[INFO] checking if '/System/Library/Frameworks/JavaVM.framework' is a JDK... no 
[INFO] configure: error: JDK not found. Please use the --with-jni-jdk option 

Tôi không thể biết chắc Maven đang xem xét để xác định "JDK chúng ta có thể sử dụng"? Một số đào xung quanh dẫn tôi đến http://www.arm4.org/trac/browser/branches/architecture/m4/jni.m4 xuất hiện để tìm jni.h ở một vài nơi và cố gắng biên dịch nó, nhưng tôi không biết liệu jni.m4 này có bất kỳ mối quan hệ thực tế Maven. Tôi có jni.h trong /Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/include/.

+0

jni.m4 có thể liên quan đến OpenJDK (dựa trên phiên bản OSX). Kiểm tra xem liệu maven đã được cập nhật vào tài khoản cho phiên bản/đường dẫn OSX JDK mới chưa, và liệu maven của bạn có được cập nhật hay không (macports có lẽ là cách dễ nhất để cập nhật nó). – technomage

+0

Tôi cài đặt lại maven từ macports ... mà đã cho tôi một chút xa hơn, nhưng sau đó xây dựng đã chết trong một loạt các tập tin tiêu đề không tìm thấy. Sau nhiều lần nữa, tôi đã có nó để xây dựng. Vấn đề lớn còn lại, tôi nghĩ, là Apple đã di chuyển thư mục SDK. Tôi vá xung quanh đó bằng cách liên kết tượng trưng/Nhà phát triển/SDK đến /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs. Cảm ơn tất cả sự giúp đỡ của bạn! – Steve

+0

Tôi đã nghe các báo cáo về các nhà phát triển khác chuyển sang 1.7 trên OSX và gặp vấn đề với tiêu đề JNI bị mất, không được liên kết với biểu tượng không chính xác hoặc thường bị rối tung lên. Một số công cụ phụ thuộc vào cách bố trí khung cũ (vì đây là cách được khuyến cáo bởi Apple), vì vậy, mong đợi một chút biến động như mọi thứ giờ đây phải điều chỉnh theo phiên bản Oracle. – technomage

Trả lời

5

Có thể bạn cần phải cài đặt gói Tài liệu Java để lấy tiêu đề; cho vài bản phát hành cuối cùng, chúng chưa được đưa vào gói JDK. Sau khi cài đặt, chúng sẽ hiển thị trong /System/Library/Frameworks/JavaVM.framework/Headers.

[sửa] Apple đã sử dụng để nhóm các tiêu đề JNI với gói tài liệu JDK. Đây không còn là trường hợp; các tiêu đề JNI nên được đóng gói cùng với gói nhà phát triển Java.

+0

Cảm ơn ... Tôi đã xem xung quanh để tải xuống gói "Tài liệu Java". Điều gần nhất tôi có thể tìm thấy là một tùy chọn trong tùy chọn XCode, trong "Bộ Tài liệu", để tải xuống "Thư viện Java Mac OS X". Đó là những gì bạn đang đề cập đến? Nó không gây ra thư mục Headers được tạo ra. – Steve

+1

Lưu ý rằng developer.apple.com/downloads tuyên bố rằng "Gói Java dành cho nhà phát triển Mac OS X 10.7" (mà tôi đã tải xuống ban đầu) bao gồm "tài liệu ... và các tiêu đề khung gốc". Tôi thấy mình tự hỏi liệu các gói phần mềm chỉ đơn giản là không cài đặt đúng. Nhưng trình cài đặt không báo cáo bất kỳ lỗi nào và tôi không thấy bất kỳ điều gì đáng ngờ trong nhật ký trình cài đặt. – Steve

+1

Chúng có thể bị thiếu trong gói phát triển do nhầm lẫn; điều này đã xảy ra trước đây. Báo cáo cho apple (bugreporter.apple.com) gói nào họ bị thiếu từ (28/9/11 hoặc 2/15/12). Nếu bạn không tìm thấy chúng trong một trong hai gói, bạn sẽ cần cài đặt hoặc sao chép từ gói trước đó - nếu bạn đã cài đặt SDK trước, hãy xem trong /Developer/SDKs/MacOSX10.*.sdk/System/ Thư viện/Khung/JavaVM.framework/Phiên bản/Hiện tạiJDK/Tiêu đề /. – technomage

11

Tôi biết đây là một chủ đề cũ, nhưng đây là những gì tôi đã làm để có được hiện nay (Late 3/14) vì vậy tôi có thể xây dựng một số Ruby GEM cần Java Headers. Overkill, nhưng bao gồm tất cả các căn cứ, tôi nghĩ.

  1. Tải Java JDK 8 từ http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

  2. Cài đặt nó.

  3. Xem nơi Oracle đặt nó:

    $/usr/libexec/java_home 
    /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home 
    
  4. liên kết mềm từ đó đến nơi mà Apple sử dụng để đặt nó:

    $cd /System/Library/Frameworks/JavaVM.framework/Versions 
    $sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents ./CurrentJDK 
    
  5. liên kết mềm để tạo ra một thư mục Headers trong JavaVM.framewrk:

    $cd /System/Library/Frameworks/JavaVM.framework 
    $sudo ln -nsf Versions/CurrentJDK/Home/include/ ./Headers 
    

Điều này cố định cho tôi.Tôi chưa băn khoăn với việc định nghĩa JAVA_HOME vì tôi không cần nó.

+0

cảm ơn, đã làm các trick cho tôi –

+0

Cảm ơn bro, bạn đã giúp rất nhiều !!! – Ordiel

+0

Điều này làm việc để xây dựng một số công cụ Hadoop sử dụng JNI, cảm ơn! – thinkmassive

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