javah(1)

名前
javah - C 言語のヘッダとスタブファイルのジェネレータ

javah は、Java クラスから C ヘッダファイルと C ソースファイルを作成します。これらのファイルは、Java プログラミング言語で書かれたコードと、C などのその他の言語で書かれたコードを接続し、コードが相互に作用するようにします。

形式
javah [ options ] fully-qualified-classname . . .
javah_g [ options ] fully-qualified-classname . . .

機能説明
javah コマンドは、ネイティブメソッドを実装するのに必要な C 言語のヘッダおよびソースファイルを生成します。 C のプログラムは、 生成されたヘッダとソースファイルを使って、 ネイティブソースコードからオブジェクトのインスタンス 変数を参照できます。 .h ファイルは、対応するクラスに合ったレイアウトの 構造体定義を含んでいます。 構造体に含まれるフィールドは、クラス内のインスタンス変数に 対応しています。

ヘッダファイル名およびヘッダファイル中で定義される構造体名は、 クラス名から派生します。 javah に渡されるクラスがパッケージ内部にあれば、 そのパッケージ名がファイル名および構造体名の先頭に付加されます。 名前の間は下線 (_) で区切られます。

デフォルトでは、 javah はコマンド行で指定された個々のクラスに対して ヘッダファイルを作成し、現在のディレクトリに出力します。 -stubs オプションを指定するとソースファイルが生成されます。 -o オプションを指定すると、指定した全クラスに対する出力ファイル を連結して 1 個のファイルとして生成します。

新しいネイティブメソッドインタフェースの Java Native Interface (JNI) は、ヘッダ情報やスタブファイルを必要としません。 ただし javah コマンドは現在も JNI 形式のネイティブメソッドに必要な ネイティブメソッド関数プロトタイプを生成できます。 javah はデフォルトで JNI 形式で出力し、その結果を .h ファイルに格納します。

javah_g は非最適化バージョンの javah で、 jdb などのデバッガ用の使用に適しています。

オプション

-o outputfile
    コマンド行で指定したすべてのクラスに対する結果のヘッダファイルまたは ソースファイルを連結し、 outputfile に格納します。 -o オプションまたは -d オプションだけを使用できます。

-d directory
    javah がヘッダファイルまたはスタブファイルを書き出す ディレクトリを指定します。

-stubs
    Java オブジェクトファイルから C 言語の宣言を生成します。

-verbose
    詳細情報の出力を要求します。 javah は、生成されたファイルの状態に関するメッセージを stdout に書き出します。

-help
    javah の使用法についてヘルプメッセージを出力します。

-version
    javah バージョン情報を出力します。

-jni
    JNI 形式のネイティブなメソッド関数のプロトタイプが入った出力ファイルを 作成します。これはデフォルトの出力であるため、 -B -jni は省略可能です。

-classpath path
    javah がクラスを検索するために用いるパスを path で指定します。この指定値は、デフォルトおよび CLASSPATH 環境変数の設定値をオーバーライドします。 複数のディレクトリを指定する場合はコロンで区切ります。 したがって path の通常の形式は次のようになります。

    .:<your_path>

    パスの指定例：

    .:/home/avh/classes:/usr/local/java/classes

便宜上、* のベース名を含むクラスパス要素は、ディレクトリ内の拡張子 .jar または .JAR を持つすべてのファイルのリストを指定するのと同じとみなされます (Java プログラムはこの 2 つの呼び出しを区別できない)。
たとえば、ディレクトリ foo に a.jar と b.JAR が含まれている場合、クラスパス要素 foo/* は A.jar:b.JAR に展開されます。ただし、JAR ファイルの順番は未定義となります。このリストには、隠しファイルも含め、指定されたディレクトリ内のすべての JAR ファイルが含まれます。* だけから成るクラスパスエントリは、カレントディレクトリ内のすべての JAR ファイルのリストに展開されます。CLASSPATH 環境変数も、定義時には同様に展開されます。クラスパスのワイルドカード展開は必ず、Java 仮想マシンの起動前に実行されます。したがって、System.getenv("CLASSPATH") 呼び出しなどの環境に対する問い合わせを行わない限り、展開されていないワイルドカードを Java プログラムは認識しません。

-bootclasspath path
    bootstrap クラスをロードするパスを指定します。デフォルトでは、bootstrap クラスはコアとなる Java 2 プラットフォームを実装するクラスで、 jre/lib/rt.jar および他の重要な jar ファイルに含まれています。

-old
    古い JDK 1.0 形式のヘッダファイルを生成します。

-force
    常に出力ファイルに書き込むことを指定します。

-Joption
    option を Java 仮想マシンに渡します。ここで、 option は、Java アプリケーション起動プログラムの参照ページで 説明されているオプションの 1 つです。たとえば、 -J-Xms48m は、起動時に使用するメモリを 48M バイトに設定します。

環境変数

CLASSPATH
    ユーザ定義クラスへのパスをシステムに通知するために使用します。 複数のディレクトリを指定する場合はコロンで区切ります。 以下に例を示します。

    .:/home/avh/classes:/usr/local/java/classes

関連項目

javac、java、jdb、javap、javadoc