Я пытаюсь создать проект JNI, но я не могу найти заголовки JNI (например, jni.h
). Я установил "Java для Mac OS X 10.7 Developer Package" из https://developer.apple.com/downloads/.
Различные онлайн-ресурсы предполагают, что заголовки должны находиться в таких местах, как /System/Library/Frameworks/JavaVM.framework/Headers
или /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/include
, но я не могу их найти нигде - установщик, похоже, не создает их.
Я вижу другие компоненты JDK - например, /System/Library/Frameworks/JavaVM.framework/Commands/javah
, но не заголовки JNI. Любые предложения?
Обновление: technomage указала, что Apple теперь устанавливает JDK под /Library/Java/JavaVirtualMachines
, а заголовки JNI находятся в /Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/include/jni.h
.
Но я все еще придерживаюсь своей фактической цели, которая заключается в создании оберток JNI для LevelDB (по инструкциям в github.com/fusesource/leveldbjni). Чтобы указать Maven на правильный JDK, я добавил /Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/bin
в начало моей PATH и установил JAVA_HOME в /Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home
. Некоторое время прерывая работу, Maven теперь терпит неудачу:
[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 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 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
Я не могу точно сказать, что Maven ищет, чтобы определить "JDK, который мы можем использовать"? Некоторые копания привели меня к http://www.arm4.org/trac/browser/branches/architecture/m4/jni.m4, который, кажется, ищет jni.h в нескольких местах и пытается скомпилировать его, но я не знаю, будет ли этот jni.m4 имеет какое-либо фактическое отношение Maven. У меня есть jni.h в/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/include/.