Как установить собственные заголовки разработки Java на OS X Lion - PullRequest
20 голосов
/ 14 марта 2012

Я пытаюсь построить проект 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'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

Я не могу точно сказать, на что смотрит 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/.

Ответы [ 2 ]

11 голосов
/ 01 апреля 2014

Я знаю, что это старая ветка, но вот что я сделал, чтобы получить текущую информацию (конец 3/14), чтобы я мог построить Ruby GEM, который нуждался в заголовках Java. Избыток, но, думаю, охватывает все основы.

  1. Загрузите Java 8 JDK с http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

  2. Установите его.

  3. Посмотрите, куда Oracle положил:

    $/usr/libexec/java_home
    /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
    
  4. Симлинк оттуда, куда Apple помещала его:

    $cd /System/Library/Frameworks/JavaVM.framework/Versions
    $sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents ./CurrentJDK
    
  5. Символическая ссылка для создания каталога заголовков в JavaVM.framewrk:

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

Это исправило вещи для меня. Я еще не удосужился дать определение JAVA_HOME, потому что оно мне не нужно.

5 голосов
/ 14 марта 2012

Вам, вероятно, нужно установить пакет документации Java, чтобы получить заголовки; за последние несколько выпусков они не были включены в пакет JDK. После установки они будут отображаться в /System/Library/Frameworks/JavaVM.framework/Headers.

[править] Apple использовала для связывания заголовков JNI с пакетом документов JDK. Это больше не так; заголовки JNI должны быть связаны с пакетом разработчика Java.

...