我正在尝试构建一个 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。我认为矫枉过正,但涵盖了所有基础。
从以下位置下载 Java 8 JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
安装它。
看看 Oracle 把它放在哪里了:
$/usr/libexec/java_home /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
从那里到 Apple 过去放置它的位置的符号链接(symbolic link):
$cd /System/Library/Frameworks/JavaVM.framework/Versions $sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents ./CurrentJDK
在 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/