Я пытаюсь создать простой пример с JNI. У меня проблемы с компиляцией исходного файла .cpp. Я дам все шаги, которые я сделал / попробовал ниже. Я пытаюсь следовать руководству, найденному здесь: http://java.sun.com/docs/books/jni/html/start.html#27008
У меня есть Java-программа под названием HelloJNI.java
public class HelloJNI
{
private native void print();
public static void main(String[] args)
{
new HelloJNI().print();
}
static
{
System.loadLibrary("HelloJNI");
}
}
Отсюда я скомпилировал файл java и вызвал
javah -jni HelloJNI
для генерации HelloJNI.h
Отсюда я создаю .cpp
исходный файл
#include <jni.h>
#include <iostream>
#include "HelloJNI.h"
using namespace std;
JNIEXPORT void JNICALL
Java_HelloJNI_print(JNIEnv *env, jobject obj)
{
cout << "Hello JNI!" << endl;
return;
}
Теперь, когда у меня есть все, что я пытаюсь создать .dll
из исходного файла, я использую эту команду для запуска gcc на cygwin (нашел эту команду здесь - http://www.inonit.com/cygwin/jni/helloWorld/c.html):
gcc -mno-cygwin -I$JAVA_HOME/include -I$JAVA_HOME/include/win32
-Wl,--add-stdcall-alias -shared -o HelloJNI.dll HelloJNI.c
Когда я делаю это, я получаю ошибку:
HelloJNI.cpp:1:17: fatal error: jni.h: No such file or directory
compilation terminated.
Вот где я застрял, я не знаю, почему компилятор не может найти jni.h
, он находится в каталоге $JAVA_HOME/include
.
Результаты ls $JAVA_HOME/include
:
classfile_constants.h jdwpTransport.h jvmti.h win32
jawt.h jni.h jvmticmlr.h
Я знаю, что это длинный пост, но любая помощь была бы потрясающей.
Спасибо