我試圖構建一個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。
jni.m4可能與OpenJDK相關(OSX版本基於此)。檢查maven是否已更新爲新的OSX JDK路徑/版本,以及您的maven是否是最新的(macports可能是更新它的最簡單方法)。 – technomage 2012-03-19 13:17:02
我從macports重新安裝了maven ...讓我有點進一步,但是然後構建死在一堆未找到的頭文件。經過更多的折磨後,我最終得到它建立。我認爲,剩下的大問題是蘋果已經移動了SDKs目錄。我通過將/ Developer/SDKs鏈接到/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs做了補丁。感謝你的幫助! – Steve 2012-03-20 23:27:12
我聽說過其他開發人員在OSX上遷移到1.7的報道,並且遇到JNI頭部丟失,錯誤符號鏈接或只是通常搞砸的問題。許多工具依賴於舊的框架佈局(因爲這是Apple推薦的方式),所以預計會有一些動盪,因爲現在一切都需要適應Oracle版本。 – technomage 2012-03-22 19:41:03