chương trình mẫu này có nghĩa là để gọi một phương thức native
viết bằng C.JNI - "Không thể mở bao gồm file: 'jni_md.h"
Java Mã
class HelloWorld {
private native void print();
public static void main(String args[]) {
new HelloWorld().print();
}
static {
System.loadLibrary("HelloWorld");
}
}
Sau khi viết i này đã biên soạn chương trình và tạo ra một tệp tiêu đề kiểu JNI
.
File header được tạo ra là:
/* 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
Và phương pháp có nguồn gốc viết bằng 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;
}
Các lỗi tôi nhận được vào biên dịch là fatal error C1083: Cannot open include file: 'jni_md.h': No such file or directory
Ngoài ra trình biên dịch của tôi gạch dưới jobject obj
nói rằng this class does not have storage class or specifier
. Nó gạch chân *env
nói expected a ')'
.
Tại sao tôi gặp lỗi này?
Bạn không có tệp hoặc thư mục nào như vậy. Kiểm tra? – dcousens
@ Daniel Nó ở đó. Câu lệnh 'include' không đưa ra lỗi –
Bạn có, nhưng không phải là" jni_md.h ". Kiểm tra các tiêu đề bao gồm những gì; cụ thể hơn, tiêu đề bao gồm "jni_md.h". EDIT: Xem Stuart Cooks câu trả lời. –
dcousens