JNIプロジェクトをビルドしようとしていますが、JNIヘッダーが見つからないようです(例:jni.h
)。 https://developer.Apple.com/downloads/ から「Javafor Mac OS X10.7DeveloperPackage」をインストールしました。
さまざまなオンラインリソースで、ヘッダーは/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は、AppleがJDKを/Library/Java/JavaVirtualMachines
の下にインストールし、JNIヘッダーが/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/include/jni.h
にあることを指摘しました。
しかし、私はまだ実際の目標に固執しています。それは、LevelDBのJNIラッパーを構築することです(github.com/fusesource/leveldbjniの指示に従って)。 Mavenを適切なJDKに向けるために、PATHの前に/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/bin
を追加し、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
「使用できるJDK」を識別するためにMavenが何を見ているのかはっきりとはわかりませんか?いくつか掘り下げてみると、 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後半)最新のものを取得するために私がしたことは、Ruby Javaヘッダー。やり過ぎですが、すべてのベースをカバーしていると思います。
Java 8 JDK from http://www.Oracle.com/technetwork/Java/javase/downloads/jdk8-downloads-2133151.html
それをインストールします。
オラクルがそれをどこに置いたかを見てください:
$/usr/libexec/Java_home
/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
そこからAppleはそれを置くために使用された場所へのシンボリックリンク:
$cd /System/Library/Frameworks/JavaVM.framework/Versions
$Sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents ./CurrentJDK
JavaVM.framewrkにHeadersディレクトリを作成するためのシンボリックリンク:
$cd /System/Library/Frameworks/JavaVM.framework
$Sudo ln -nsf Versions/CurrentJDK/Home/include/ ./Headers
これは私のために物事を修正しました。 Java_HOME
を定義する必要がなかったので、まだ定義する必要はありません。
ヘッダーを取得するには、おそらくJavaドキュメントパッケージをインストールする必要があります。最近のいくつかのリリースでは、それらはJDKパッケージに含まれていません。インストール後、それらは/System/Library/Frameworks/JavaVM.framework/Headersに表示されます。
[編集] AppleJNIヘッダーをJDKdocパッケージにバンドルするために使用されます。これはもはや当てはまりません。 JNIヘッダーshould Java開発者パッケージにバンドルされています。