Начало работы с JNI и C под Windows

Я новичок в изучении Java и впервые хочу начать работу с JNI. И я работаю с Cygwin, и я создал файл с расширением .java (Helloworld.java) следующим образом:

class HelloWorld {
     private native void print();
     public static void main(String[] args) {
         new HelloWorld().print();
     }
     static {
         System.loadLibrary("HelloWorld");
     }
 }

Затем я компилирую файл через командную строку (javac Helloworld.java), после чего создаю собственный файл заголовка с помощью команды javah –jni Helloworld Затем также реализую, создавая файл C как:

#include <jni.h>
 #include <stdio.h>
 #include "HelloWorld.h"

 JNIEXPORT void JNICALL 
 Java_HelloWorld_print(JNIEnv *env, jobject obj)
 {
     printf("Hello World!\n");
     return;
 }

После этого, пока я запускаю команду

 Gcc –wall –g Helloworld.c –o hello 

Дайте сообщение в строке командной строки в Cygwin

 helloworld.c:1:17: fatal error: jni.h: No such file or directory
 compilation terminated.

Как запустить и какова процедура установки пути для выполнения файла? Пожалуйста, помогите мне любой. Спасибо.


person Takianwar    schedule 22.06.2012    source источник
comment
Похоже, вы либо не установили библиотеку JNI для C, либо не включили ее в путь включения.   -  person m0skit0    schedule 22.06.2012
comment
ИМХО, JNI - худшее, что вы могли бы подобрать, учитывая, что вы новичок в Java. Лично я рекомендую начать с Java Learning Trail и взять хорошая книга, например, Head First Java.   -  person Sanjay T. Sharma    schedule 22.06.2012
comment
Почему это помечено jni4net?   -  person RenniePet    schedule 22.07.2013


Ответы (4)


Я предполагаю, что вы не добавили каталог jni в список подключаемых каталогов, проверьте http://social.msdn.microsoft.com/forums/is/vclanguage/thread/cd7f2d1d-f750-494c-a3b2-7d4186cfe51c.

person Qnan    schedule 22.06.2012

Предполагая, что вы установили JDK, вам необходимо сообщить gcc о каталоге include для JNI:

-I$JAVA_HOME/../include

где $JAVA_HOME должен быть установлен как родительский каталог для каталога Java bin (например, /usr/lib/jvm/java-6-openjdk-amd64/jre на моей машине). Если он не установлен, что ж, будет проще, если вы просто найдете папку, в которой находится ваш заголовок jni.h.

Я согласен, что начать изучение Java с JNI — сложная задача, но я уважаю ваше решение. Если вам нравятся книги о моде, я бы посоветовал Core Java Volume I и Core Java Volume II. В частности, в конце последнего вы можете найти довольно исчерпывающий обзор нативных методов.

person Luca Geretti    schedule 22.06.2012

Я использовал MinGW в Windows. После добавления «;C:\MinGW\bin\» в переменную среды пути я смог запустить gcc.exe из командной строки Windows, используя приведенную ниже команду.

Файл jni.h находится в папке java home include. Вы можете использовать переменную среды JAVA_HOME или указать явно.

 gcc -c -I"C:\Program Files\Java\jdk1.6.0_26\include" -I"C:\Program Files\Java\jdk1.6.0_26\include\win32" "S:\Accessibility\tools\src\test\java\com\accessibility\HelloWorld.c"

Это создало файл HelloWorld.o.

person Scott Izu    schedule 09.08.2013

Если Visual Studio успешно установлена ​​на вашем компьютере, вы можете скомпилировать с помощью командной строки Visual Studio Developer.

Чтобы создать X86 (32-разрядную) версию dll, используйте «VS20XX x86 Native Tools Command Prompt».

Чтобы создать X64 (64-разрядную) версию dll, используйте «VS20XX x64 Native Tools Command Prompt».

XX в VS20XX — это Visual Studio версии 2008 и выше.

cl.exe /LD /EHsc /I "%JAVA_HOME%\include" /I "%JAVA_HOME%\include\win32" TestJNIString.c

Примечание. Убедитесь, что переменная JAVA_HOME установлена ​​в переменной среды.

person Sugat Mankar    schedule 08.03.2017