Этот пример программы предназначен для вызова собственного
метода, написанного на C.
Java-код
class HelloWorld {
private native void print();
public static void main( String args[] ) {
new HelloWorld().print();
}
static {
System.loadLibrary("HelloWorld");
}
}
После написания этого я скомпилировал программу и сгенерировал файл заголовка в стиле JNI
.
сгенерирован файл заголовка:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <C:\Program Files\Java\jdk1.7.0\include\jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
И собственный метод, написанный на c
#include <C:\Program Files\Java\jdk1.7.0\include\jni.h>
#include <C:\Program Files\Java\jdk1.7.0\include\win32\jni_md.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_print( JNIENv *env , jobject obj) {
printf("Hello World!\n");
return;
}
. Ошибка, которую я получаю при компиляции, - это фатальная ошибка C1083: Невозможно открыть включаемый файл: 'jni_md.h': Нет такого файла или каталога
Также мой компилятор подчеркивает jobject obj
, говоря, что этот класс не имеет класса памяти или спецификатора
. Он подчеркивает * env
, говоря ожидал ')'
.
Почему я получаю эту ошибку?