java - 如何在 OS X Lion 上安装 Java 原生开发头文件

标签 java java-native-interface osx-lion

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

各种在线资源建议 header 应位于 /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 header 。有什么建议吗?


更新:technomage 指出 Apple 现在将 JDK 安装在 /Library/Java/JavaVirtualMachines 下,JNI header 位于 /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 设置为 /库/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有任何实际关系。我在/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/include/中有 jni.h。

最佳答案

我知道这是一个旧线程,但这是我今天(3 月 14 日末)所做的,因此我可以构建一些需要 Java header 的 Ruby GEM。我认为矫枉过正,但涵盖了所有基础。

  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 过去放置它的位置的符号链接(symbolic link):

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

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

这为我解决了问题。我还没有定义 JAVA_HOME 因为我不需要它。

关于java - 如何在 OS X Lion 上安装 Java 原生开发头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9704376/

相关文章:

java - 实现 Map<MyObject,ArrayList<MyObject>> 的正确方法

java - ejdb Java 绑定(bind)不起作用 "no jejdb in java.library.path"

android - Unity3d 与 android 集成

objective-c - NSPopover 和 NSButton 控件

java - 如何在java中反转xml节点及其数据

java - 嵌套异常是 java.lang.NoClassDefFoundError : org/springframework/aop/config/AopNamespaceUtils

java - JNI : can't convert jstring to LPCTSTR?

installation - OSX Lion 上的 psycopg2 安装问题

html - 选择字段中的项目而不是提交按钮时,Safari 提交表单

Observer 类在被多次通知时的 Java 行为