Ошибка Javah при использовании его в JNI - PullRequest
44 голосов
/ 12 июня 2009

Команда:

javah -jni JavaHowTo

Результат:

error: cannot access JavaHowTo 
class file for JavaHowTo not found

javadoc: error - Class JavaHowTo not found.
Error: No classes were specified on the command line.  Try -help.

Я правильно установил путь к классу, но все равно получаю эту javah ошибку.

Любое решение для этого будет очень полезным.

Ответы [ 14 ]

1 голос
/ 21 января 2013

выпуск на Cygwin:

javah не работает должным образом с терминала Cygwin:

$ cd /cygdrive/c/Workspace/prj/bin
$ ls com/example/JavaHotTo.class
com/example/JavaHotTo.class
$ javah com.example.JavaHowTo
Error: Could not find class file for 'com.example.JavaHowTo'.

Но он отлично работает, используя опцию -classpath .

$ javah -classpath . com.example.JavaHowTo
$ ls *.h
com_example_JavaHotTo.h

Еще хитрости:

  • Опция -jni по умолчанию, поэтому она не требуется.
  • Вы можете дать относительный / абсолютный classpath
  • Но javah в MS-Windows предпочитает путь а-ля C:\Workspace\prj\bin
  • Используйте cygpath -w /cygdrive/c/Workspace/prj/bin для преобразования в формат MS-Windows
  • Используйте опцию -d your/jni/headers/path для записи заголовков в другой каталог
  • javah создает путь your/jni/headers/path, если он не существует (см. Ниже)

    $ javah -d jni/headers -classpath . com.example.JavaHowTo
    $ ls       jni\headers
    com_example_JavaHotTo.h
    $ javah -d jni\path -classpath . com.example.JavaHowTo
    $ ls       jni\path
    com_example_JavaHotTo.h
    
0 голосов
/ 08 февраля 2017
How to generate a `JNI Header` file from an `Android class` file using `javah` (`.java` or `.class` BOTH work equally well).<br>
For Eclipse project on Windows:<br>
Goto the directory where the src, bin and jni folders are (so we can use relative paths to src or bin and jni):

    cd C:\Android\workspace5\AndroidImageFilter

I assume `javah` is in your `PATH` (It is in something like : `C:\Program Files\Java\jdk1.7.0_79\bin\javah.exe`):
            javah -classpath c:\Android\sdk\platforms\android-19\android.jar;./src/ -d ./jni cn.Ragnarok.NativeFilterFunc
                             ^                                ^      ^      ^   ^    ^   ^   ^                 ^
                             |                                |      |      |   |    |   |   |                 |
Your android:targetSdkVersion="16"----------------------------+      |      |   |    |   |   |                 |
                             |                                       |      |   |    |   |   |                 |
                             |                                       |      |   |    |   |   |                 |
path to android.jar ---------+---------------------------------------+      |   |    |   |   |                 |
                                                                            |   |    |   |   |                 |
                                                                            |   |    |   |   |                 |
                                                                            |   |    |   |   |                 |
semicolon (;) important ! --------------------------------------------------+   |    |   |   |                 |
                                                                                |    |   |   |                 |
You can use the source directory (yes you can !) (OR the /bin/classes/ dir)-----+    |   |   |                 |
                                                                                     |   |   |                 |
Where to put the output file (cn_Ragnarok_NativeFilterFunc.h in this case)-----------+---+   |                 |
                                                                                             |                 |
The dot (.) spearated full package name path to the .java source file WITH file name --------+                 |
                                                                                                               |
File name of a java class -------------------------------------------------------------------------------------+

For Android Studio on Windows e'g':                                             ^
cd C:\Android\workspace5\AndroidImageFilter\app\src\main                        |
and usr java INSTEAD of src ----------------------------------------------------+

См. http://kn -gloryo.github.io / Build_NDK_AndroidStudio_detail / для лучшего способа.

Если у вас много имен файлов (классов Java), вы можете использовать файл со списком классов.
Если вы используете Linux или MAC-OS, используйте «:» (двоеточие) для разделения каталогов для classpath, а не «;»
См. Ссылку http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/javah.html

0 голосов
/ 03 марта 2016

Следующее сработало для меня ... Перейти к пути проекта из терминала, как,

/ home / usr / Desktop / Workspace / ProjectName / src / main / java

и нажмите следующую команду,

javah -jni com.abc.test.callfileName (без расширения .class)

Файл com_abc_test_className.h будет создан по следующему пути / home / usr / Desktop / Workspace / ProjectName / src / main / java

наконец-то команда выглядит так: [my-machine / usr] $ / home / usr / Desktop / Workspace / ProjectName / src / main / java / src / main / java> javah -jni com.abc.test.className

0 голосов
/ 23 февраля 2014

Перейдите в каталог bin вашего проекта Java через командную строку Windows cmd.

cd "Path to the bin directory of your java project"

Тогда

javah "Your Package"."Name Of Your Java Class"
...