Java 编译C++;将源文件转换为.dll

Java 编译C++;将源文件转换为.dll,java,c++,java-native-interface,Java,C++,Java Native Interface,我试图用JNI创建一个简单的示例。编译.cpp源文件时遇到问题。我将给出我在下面所做/尝试的所有步骤。我正试图遵循以下教程: 我有一个Java程序,名为HelloJNI.Java public class HelloJNI { private native void print(); public static void main(String[] args) { new HelloJNI().print(); } static

我试图用JNI创建一个简单的示例。编译.cpp源文件时遇到问题。我将给出我在下面所做/尝试的所有步骤。我正试图遵循以下教程:

我有一个Java程序,名为
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;
}
当我这样做时,我会得到一个错误:

HelloJNI.cpp:1:17: fatal error: jni.h: No such file or directory
compilation terminated.
这就是我被卡住的地方,我真的不知道编译器在
$JAVA\u HOME/include
目录中找不到
jni.h

来自ls$JAVA\u HOME/include的结果

classfile_constants.h  jdwpTransport.h  jvmti.h      win32
jawt.h                 jni.h            jvmticmlr.h
我知道这是一篇很长的帖子,但任何帮助都会很棒


谢谢

我使用以下标志进行编译:

JDK = "c:/Program Files/Java/jdk1.5.0_22/"
CFLAGS=-Wall -DGCC -DWINDOWS -I$(JDK)/include/win32 -I$(JDK)/include
但是,我应该提到,如果dll是用cygwin gcc编译的,我就无法运行我的JNI应用程序。当时我用VisualStudio进行了编译,它成功了

JDK = "c:/Program Files/Java/jdk1.5.0_22/"
CFLAGS=-Wall -DGCC -DWINDOWS -I$(JDK)/include/win32 -I$(JDK)/include