如何在OS X Lion上安装Java本机开发标头

Ste*_*eve 20 java java-native-interface osx-lion

我正在尝试构建一个JNI项目,但我似乎找不到JNI头文件(例如jni.h).我已经从https://developer.apple.com/downloads/安装了"Java for Mac OS X 10.7 Developer Package" .

各种在线资源建议标题应该在诸如/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.

但我仍然坚持我的实际目标,即为LevelDB构建JNI包装器(根据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
Run Code Online (Sandbox Code Playgroud)

我无法确定Maven正在寻找什么来识别"我们可以使用的JDK"?一些挖掘引导我到http://www.arm4.org/trac/browser/branches/architecture/m4/jni.m4,似乎在几个地方寻找jni.h并尝试编译它,但我不喜欢不知道这个jni.m4是否与Maven有任何实际关系.我在/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/include/中有jni.h.

Pat*_*Fog 11

我知道这是一个旧线程,但这是我今天所做的事情(3/14后期)所以我可以构建一些需要Java Headers的Ruby GEM.我认为,矫枉过正,但涵盖了所有基础.

  1. http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载Java 8 JDK

  2. 安装它.

  3. 看看Oracle把它放在哪里:

    $/usr/libexec/java_home
    /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
    
    Run Code Online (Sandbox Code Playgroud)
  4. 符号链接从那里到Apple过去的地方:

    $cd /System/Library/Frameworks/JavaVM.framework/Versions
    $sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents ./CurrentJDK
    
    Run Code Online (Sandbox Code Playgroud)
  5. 用于在JavaVM.framewrk中创建Headers目录的符号链接:

    $cd /System/Library/Frameworks/JavaVM.framework
    $sudo ln -nsf Versions/CurrentJDK/Home/include/ ./Headers
    
    Run Code Online (Sandbox Code Playgroud)

这对我来说是固定的.我还没有为定义JAVA_HOME而烦恼,因为我不需要它.


tec*_*age 5

您可能需要安装Java Documentation包来获取标头; 对于最后几个版本,它们尚未包含在JDK包中.安装后,它们将显示在/System/Library/Frameworks/JavaVM.framework/Headers中.

[edit] Apple过去常常将JNI标头与JDK doc包捆绑在一起.这已不再是这种情况; JNI头文件与Java开发人员包捆绑在一起.

  • 顺便说一句,您可以运行"locate jni.h"来查看系统上是否安装了*any*标头. (3认同)