2013-06-20 45 views
0

我是Java JNI的新手。我嘗試了一個helloCPP程序,但遇到了問題。這裏是我的代碼:java C++ jni不滿意的鏈接錯誤

helloCPP.java;

public class helloCPP { 
    public native void hellocpp(); 
    static { 
     System.loadLibrary("helloCPP"); 
    } 
    public static void main (String [] args) { 
     helloCPP hcpp=new helloCPP(); 
     hcpp.hellocpp(); 

     System.exit (0); 
    } 
} 

然後這裏是我的hellocpp.cpp,其中我做了helloCPP.dll;

#include <iostream> 
#include "helloCPP.h" 
using namespace std ; 
JNIEXPORT void JNICALL Java_helloCPP_hellocpp. (JNIEnv *env, jobject obj) { 
cout <<"hello java, I'm c++\n"; 
} 
int main(){}; 

我成功構建了helloCPP.dll。但是當我嘗試運行java helloCPP時,出現此錯誤:

Exception in thread "main" 
java.lang.UnsatisfiedLinkError: helloCPP.hellocpp() V 
at helloCPP.hellocpp(Native Method) 
at helloCPP.main (helloCPP.java :8) 

我正在Windows 8 x86操作系統上執行所有這些操作。 這些都是我寫的命令:

javac helloCPP.java 
javah helloCPP 
g++ -c hellocpp.cpp 
g++ -o helloCPP.dll hellocpp.cpp 

這其中所產生的錯誤:

java HelloCPP 

在此先感謝。

+0

您不需要DLL中的main(),但您確實需要編譯器和鏈接器開關來指定生成共享庫。 – EJP

回答

-1

很可能,Java運行時找不到DLL文件。您已經運行帶有附加參數的Java應用程序(假設DLL文件在當前目錄):

java -Djava.library.path=. HelloCPP 

更新:

EJP好點。我認爲你的鏈接命令不正確。第二個G ++命令應該是這樣的:

g++ -o helloCPP.dll -shared hellocpp.o 

有兩個變化:hellocpp.o代替hellocpp.cpp,更重要的是選擇-shared以表明您想創建一個共享庫,而不是可執行文件。

確切的選項取決於您的平臺。由於您沒有具體說明,我無法確定。

+0

我試過在我的cmd.exe上運行該命令,但我仍然得到相同的錯誤信息: –

+0

編號。異常告訴您問題在於找到已加載的DLL中的方法。 – EJP

+0

是的,好點。我已經更新了我的答案。 – Codo