2011-09-22 36 views
2

我試圖用JNI創建一個簡單的示例。我無法編譯.cpp源文件。我會提供我已經完成/嘗試的所有步驟。我想按照這個網址教程:http://java.sun.com/docs/books/jni/html/start.html#27008將C++源代碼編譯爲一個.dll

我有一個名爲HelloJNI.java

public class HelloJNI 
{ 
    private native void print(); 

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

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

從這裏Java程序我編譯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 

我知道這是一個漫長的職位,但任何幫助將是真棒。

感謝

回答

2

我使用下面的選項編譯:

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

不過,我要指出,我是不是能夠運行我的JNI應用程序如果DLL用cygwin的GCC編譯。我隨後用Visual Studio編譯並運行。

+0

感謝您的文章,我會試試這個。 –