Este programa de ejemplo está destinado a llamar a un método native
escrita en C.JNI - "No se puede abrir archivo de inclusión: 'jni_md.h'"
Código de Java
class HelloWorld {
private native void print();
public static void main(String args[]) {
new HelloWorld().print();
}
static {
System.loadLibrary("HelloWorld");
}
}
Después de escribir esto, compiló el programa y generó un archivo de encabezado de estilo JNI
.
El archivo de cabecera generado es:
/* 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
Y el método nativo escrito en 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;
}
El error que consigo en la compilación es fatal error C1083: Cannot open include file: 'jni_md.h': No such file or directory
También mi compilador subraya jobject obj
diciendo que this class does not have storage class or specifier
. Subraya *env
diciendo expected a ')'
.
¿Por qué me sale este error?
No tiene tal archivo o directorio. ¿Comprobar? – dcousens
@ Daniel Está allí. La instrucción 'include' no da un error –
Tiene, pero no" jni_md.h ". Compruebe qué encabezados incluyen qué; más específicamente, qué encabezado incluye "jni_md.h". EDITAR: Ver la respuesta de Stuart Cooks. –
dcousens