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/.
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
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
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