我正在尝试使用JNI创建一个简单的示例。我在编译.cpp源文件时遇到问题。我将给出我在下面完成/尝试的所有步骤。我正在尝试按照此处的教程进行操作:http://java.sun.com/docs/books/jni/html/start.html#27008
我有一个名为HelloJNI.java
public class HelloJNI
{
private native void print();
public static void main(String[] args)
{
new HelloJNI().print();
}
static
{
System.loadLibrary("HelloJNI");
}
}
从这里我编译了java文件并调用了
javah -jni HelloJNI
生成HelloJNI.h
从这里开始创建.cpp
源文件
#include <jni.h>
#include <iostream>
#include "HelloJNI.h"
using namespace std;
JNIEXPORT void JNICALL
Java_HelloJNI_print(JNIEnv *env, jobject obj)
{
cout << "Hello JNI!" << endl;
return;
}
现在我已经尝试从源文件创建.dll
,我使用此命令在cygwin上运行gcc(在此处找到此命令 - http://www.inonit.com/cygwin/jni/helloWorld/c.html):
gcc -mno-cygwin -I$JAVA_HOME/include -I$JAVA_HOME/include/win32
-Wl,--add-stdcall-alias -shared -o HelloJNI.dll HelloJNI.c
当我这样做时,我收到一个错误:
HelloJNI.cpp:1:17: fatal error: jni.h: No such file or directory
compilation terminated.
这就是我被困住的地方,我真的不知道编辑器找不到jni.h
它在$JAVA_HOME/include
目录中。
ls $JAVA_HOME/include
的结果:
classfile_constants.h jdwpTransport.h jvmti.h win32
jawt.h jni.h jvmticmlr.h
我知道这是一篇冗长的帖子,但任何帮助都会很棒。
由于
答案 0 :(得分:2)
我使用以下标志进行编译:
JDK = "c:/Program Files/Java/jdk1.5.0_22/"
CFLAGS=-Wall -DGCC -DWINDOWS -I$(JDK)/include/win32 -I$(JDK)/include
但是,我应该提一下,如果使用cygwin gcc编译dll,我无法运行我的JNI应用程序。我用Visual Studio编译然后它工作了。