Suh*_*pta 36 c java java-native-interface compiler-errors
此示例程序旨在调用native用C编写的方法.
Java代码
class HelloWorld {
private native void print();
public static void main( String args[] ) {
new HelloWorld().print();
}
static {
System.loadLibrary("HelloWorld");
}
}
Run Code Online (Sandbox Code Playgroud)
写完这个后,我编译了程序并生成了一个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
Run Code Online (Sandbox Code Playgroud)
用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;
}
Run Code Online (Sandbox Code Playgroud)
我编译的错误是 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 ')'.
为什么我会收到此错误?
Stu*_*ook 40
我怀疑jni.h是在尝试#include <jni_md.h>,然后失败,因为你还没有将它的位置添加到你的包含路径.
尝试将这两个条目添加到C编译器的包含路径中:
C:\Program Files\Java\jdk1.7.0\includeC:\Program Files\Java\jdk1.7.0\include\win32该win32路径可能是不必要的,这取决于如何jni.h设置.