Использование javah в линуксе

У меня есть простой класс для использования в JNI, который мне нужно экспортировать в файл заголовка (.h).

Я читал, что мне нужно использовать команду javah, перейдя в папку src проекта и набрав:

javah -jni com.main_package.NativeClass 

В Windows это работает нормально, а в моей основной ОС (Linux) - нет. Он продолжает говорить, что не может найти класс. Я пытался использовать множество комбинаций команды и запускать ее многими возможными путями, но это не сработало. Я следил за многими учебниками и веб-сайтами (в том числе здесь), а также пробовал их комбинации.

Я даже пытался использовать для этого внешний инструмент Eclipse, как показано здесь, но это также показал ту же ошибку.

Ошибка, которую я получаю, выглядит так:

error: cannot access com.main_package.NativeClass 
class file for com.main_package.NativeClass  not found
javadoc: error - Class com.main_package.NativeClass  not found.
Error: No classes were specified on the command line.  Try -help.

Кто-нибудь может мне помочь, пожалуйста! Мне очень нравится работать в Linux, и я бы не хотел менять ОС каждый раз, когда мне нужно использовать этот инструмент.


Вот правильный ответ:

  1. для консоли перейдите в папку «bin/classes» и запустите команду, которую я использовал:

    javah -jni com.main_package.NativeClass

  2. для eclipse используйте ссылку, которую я дал, но вместо ${project_loc}/bin/ используйте ${project_loc}/bin/classes/, а затем в проводнике пакетов перейдите к NativeClass.java и запустите внешний инструмент. вывод будет по тому же пути, что и у java-файла.


person android developer    schedule 21.06.2012    source источник


Ответы (2)


Вы переходите не в папку src проекта, а в корень ваших скомпилированных файлов .class (где существует или создается подпапка com). javah ищет скомпилированный класс, а не исходный файл. Если вы просто запустите javac вручную, файл класса будет находиться в том же месте, что и исходные коды. Тогда утверждение «перейти в папку src» верно. Однако, если у вас есть проект в Eclipse или вы используете ant или что-то в этом роде, классы могут находиться в совершенно другом месте - в зависимости от того, как настроен ваш проект. Я предполагаю, что проекты Eclipse в вашей Windows и Linux настроены по-разному.

person Pavel Zdenek    schedule 21.06.2012
comment
не совсем то, что вы написали, но работало в папке .../bin/classes/. может быть, это потому, что это проект библиотеки Android. как заставить его работать на самом затмении вместо использования консоли? - person android developer; 21.06.2012
comment
нашел, как заставить его работать на eclipse. я обновлю свой вопрос, чтобы включить ответ. Спасибо. - person android developer; 21.06.2012
comment
Вы случайно не знаете, как мне использовать eclipse для этого и поместить выходной файл в определенную папку проекта? - person android developer; 21.06.2012
comment
Не из головы. В любом случае, вам лучше задать новый вопрос. Это вообще полезное знание, так зачем прятать его во вложенных комментариях под темой JNI. - person Pavel Zdenek; 21.06.2012
comment
теперь я начал с нуля для eclipse в windows, и я не могу найти способ сделать ту же работу, используя сам eclipse. он продолжает говорить, что файл не существует для внешнего инструмента с именем make с использованием ndk. . - person android developer; 29.08.2012
comment
@androiddeveloper, при настройке моего внешнего инструмента для запуска класса я указал свой рабочий каталог на ‹project›/bin/classes/, как вы указали в своем обновлении, и это сработало отлично — файл заголовка был создан в классах каталог. - person marienke; 13.02.2013
comment
этот вопрос больше не нужен, так как новый NDK сделает всю работу за вас. во всяком случае, я не помню, как сделать весь процесс без NDK. - person android developer; 13.02.2013

Вам не нужно использовать javah в файлах классов. Вы можете использовать javah непосредственно в исходных файлах (.java) для создания собственного файла подписи (заголовка) C/++. Бывший:

javah -cp /Users/Android/android-sdk/platforms/android-xy/android.jar;. com.test.JniTest
person VJ Vélan Solutions    schedule 21.09.2013
comment
к сожалению больше не могу попробовать. возможно в будущем. спасибо за попытку помочь. надеюсь, это поможет другим. - person android developer; 21.09.2013