Этот пример программы предназначен для вызова метода native
, написанного на 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;
}
Ошибка при компиляции: fatal error C1083: Cannot open include file: 'jni_md.h': No such file or directory
Также мой компилятор подчеркивает jobject obj
, говоря, что this class does not have storage class or specifier
. Он подчеркивает *env
, говоря expected a ')'
.
Почему я получаю эту ошибку?