javah
実際のクラスパスを出力する方法の単なるバグだと思います。何が起こるかというと、組み込みクラスを検索する場所がたくさんあり、それらとは別に、 内のものも使用し$CLASSPATH
ます。使用されている実際のクラスパスを出力すると、次のような処理が行われます (疑似コード。implicitEntries
は組み込みクラスパス エントリexplicitEntries
のリストであり、 は で指定されたディレクトリのリストであると仮定します$CLASSPATH
)。
print implicitEntries.join(pathSeparator) + explicitEntries.join(pathSeparator)
あるべき場所
print implicitEntries.join(pathSeparator) + pathSeparator + explicitEntries.join(pathSeparator)
以下は私にとってはうまくいきます:
$ ls
Sasl.class Sasl.java
$ javah -classpath . -o javasasl.h -jni -verbose Sasl [ Search Path: /usr/java/jdk1.6.0/jre/lib/resources.jar:/usr/java/jdk1.6.0/jre/lib/rt.jar:/usr/java/jdk1.6.0/jre/lib/sunrsasign.jar:/usr/java/jdk1.6.0/jre/lib/jsse.jar:/usr/java/jdk1.6.0/jre/lib/jce.jar:/usr/java/jdk1.6.0/jre/lib/charsets.jar:/usr/java/jdk1.6.0/jre/classes/. ]
[Creating file javasasl.h]
[search path for source files: [.]]
[search path for class files: [/usr/java/jdk1.6.0/jre/lib/resources.jar, /usr/java/jdk1.6.0/jre/lib/rt.jar, /usr/java/jdk1.6.0/jre/lib/sunrsasign.jar, /usr/java/jdk1.6.0/jre/lib/jsse.jar, /usr/java/jdk1.6.0/jre/lib/jce.jar, /usr/java/jdk1.6.0/jre/lib/charsets.jar, /usr/java/jdk1.6.0/jre/classes, /usr/java/jdk1.6.0/jre/lib/ext/dnsns.jar, /usr/java/jdk1.6.0/jre/lib/ext/localedata.jar, /usr/java/jdk1.6.0/jre/lib/ext/sunpkcs11.jar, /usr/java/jdk1.6.0/jre/lib/ext/sunjce_provider.jar, .]]
[loading ./Sasl.class]
[loading /usr/java/jdk1.6.0/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Object.class)]
[loading /usr/java/jdk1.6.0/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Throwable.class)]
[loading /usr/java/jdk1.6.0/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Class.class)]
[done in 585 ms]
$ ls
javasasl.h Sasl.class Sasl.java
さて、ヘッダー ファイルの生成が機能していないようです...Sasl.class
現在のディレクトリにあるのは確かですか? javah
Java ソース ファイルではなく、バイト コード ファイルで動作します。