2012-03-14 105 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

相關問題