[java] JNI - "Impossibile aprire il file include: 'jni_md.h'"



1 Answers

Prova questo,

HelloWorld.c

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

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

Compililo usando cl.exe (sto usando VC ++ e CL.EXE richiesti seguendo le opzioni della riga di comando).

c: \> cl -c / I "c: \ Programmi \ java \ jdk1.7.0 \ include" / I "c: \ Prog ram Files \ java \ jdk1.7.0 \ include \ win32" HelloWorld.c

Link. Modulo OBJ

c: \> link / libpath = "c: \ Programmi \ java \ jdk1.7.0 \ lib" HelloWorld.obj / dll

Question

Questo programma di esempio intende richiamare un metodo native scritto in C.

Codice Java

class HelloWorld {

    private native void print();

    public static void main( String args[] ) {
        new HelloWorld().print();
    }

    static {
        System.loadLibrary("HelloWorld");
    }

}

Dopo averlo scritto, ho compilato il programma e generato un file di intestazione di stile JNI .

Il file di intestazione generato è:

/* 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

E il metodo nativo scritto in 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;
}

L'errore che ottengo durante la compilazione è fatal error C1083: Cannot open include file: 'jni_md.h': No such file or directory

Anche il mio compilatore sottolinea jobject obj dicendo che this class does not have storage class or specifier . Sottolinea *env dicendo expected a ')' .

Perché ottengo questo errore?




Basta copiare il file jni_md.h nella cartella in cui jni.h.




Related