2012-03-14 97 views
20

我试图构建一个JNI项目,但似乎找不到JNI标头(例如jni.h)。我从https://developer.apple.com/downloads/安装了“Java for Mac OS X 10.7开发包”。如何在OS X Lion上安装Java本地开发标头

各种在线资源建议标题应位于如/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指出,苹果现在安装/Library/Java/JavaVirtualMachines下的JDK和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 

我不能肯定地告诉什么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。

+0

jni.m4可能与OpenJDK相关(OSX版本基于此)。检查maven是否已更新为新的OSX JDK路径/版本,以及您的maven是否是最新的(macports可能是更新它的最简单方法)。 – technomage 2012-03-19 13:17:02

+0

我从macports重新安装了maven ...让我有点进一步,但是然后构建死在一堆未找到的头文件。经过更多的折磨后,我最终得到它建立。我认为,剩下的大问题是苹果已经移动了SDKs目录。我通过将/ Developer/SDKs链接到/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs做了补丁。感谢你的帮助! – Steve 2012-03-20 23:27:12

+0

我听说过其他开发人员在OSX上迁移到1.7的报道,并且遇到JNI头部丢失,错误符号链接或只是通常搞砸的问题。许多工具依赖于旧的框架布局(因为这是Apple推荐的方式),所以预计会有一些动荡,因为现在一切都需要适应Oracle版本。 – technomage 2012-03-22 19:41:03

回答

5

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

Apple用来将JNI头文件与JDK doc包打包在一起。这已不再是这种情况; JNI头文件应该与Java开发包捆绑在一起。

+0

谢谢......我环顾四周寻找“Java文档包”下载。我能找到的最接近的东西是XCode首选项中的一个选项,在“文档集”下,下载“Mac OS X Java库”。这是你指的是什么?它不会导致创建Headers目录。 – Steve 2012-03-14 21:53:58

+1

请注意,developer.apple.com/downloads指出“Java for Mac OS X 10.7开发包”(我最初下载的版本)包括“文档...和本机框架标题”。我发现自己想知道这个软件包是不是正确安装。但安装程序没有报告任何错误,并且我在安装程序日志中没有看到任何可疑内容。 – Steve 2012-03-14 22:28:50

+1

他们可能会错误地从开发包中丢失;这已经发生过。向苹果(bugreporter.apple.com)报告它们丢失的包裹(9/28/11或2/15/12)。如果您没有在任何一个软件包中找到它们,则需要安装或复制以前的软件包 - 如果您安装了以前的SDK,请查看/Developer/SDKs/MacOSX10.*.sdk/System/图书馆/框架/ JavaVM.framework /版本/ CurrentJDK /头/。 – technomage 2012-03-15 10:53:53

11

我知道这是一个旧线程,但这是我今天所做的(3/14),所以我可以构建一些需要Java头文件的Ruby GEM。过度杀伤力,但涵盖所有的基础,我想。

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

  2. 安装它。

  3. 看到甲骨文所说的那样:

    $/usr/libexec/java_home 
    /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home 
    
  4. 符号链接从那里到苹果用来放它:

    $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,但因为我不需要它。

+0

谢谢,这对我来说诀窍 – 2014-09-05 12:40:13

+0

感谢兄弟,你确实帮了大忙! – Ordiel 2014-10-09 02:21:40

+0

这用于构建一些使用JNI的Hadoop工具,谢谢! – thinkmassive 2015-06-04 18:48:43