Я думаю, это просто ошибка в том, как javah
выводит фактический путь к классу.Что происходит, так это то, что у него есть куча мест, где он ищет встроенные классы, и кроме них он также использует материал из $CLASSPATH
.Когда он печатает фактический используемый classpath, они делают что-то вроде этого (псевдокод, предполагая, что implicitEntries
- это список встроенных записей classpath, а 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.