2015-07-01 43 views
0

我想在java中編譯我的第一個本地程序。編譯好的.c和.h文件但運行java代碼時出現此錯誤。 這裏是我的Java和C源文件在java本地編程中不滿意的鏈接錯誤

Main.java

public class Main{ 
    public native void sayHello(); 
    static{ 
     System.loadLibrary("hello"); 
    } 
    public static void main(String[] args) { 
    Main main = new Main(); 
     main.sayHello(); 
    } 
} 

HELLO.C

#include <jni.h> 
#include "stdio.h" 
#include "Main.h" 

JNIEXPORT void JNICALL Java_Main_sayHello(JNIEnv *env, jobject obj){ 
    printf("Hello World \n"); 
    return; 

} 

.C文件彙編

C:.../gcc -I "C:\Program Files\Java\jdk1.7.0_79\include" -I "C:\Program Files\Java\jdk1.7.0_79\include\win32" -o hello.dll -shared Hello.c 

運行Java文件

C:.../javac Main.java 
C:.../java Main 
Exception in thread "main" java.lang.UnsatisfiedLinkError: Main.sayHello()V 
    at Main.sayHello(Native Method) 
    at Main.main(Main.java:8) 
+1

請將您的命令提示符輸出發佈爲文本,而不是圖像。這使得搜索類似的問題變得更容易。 – SaeX

+2

'-o hello.dell'?它應該是'hello.dll'。這是你的問題中的拼寫錯誤還是你真的命名了你的庫'hello.dell'? – SJuan76

+0

對不起這是打字錯誤.edited that..my錯誤..我得到hello.dll文件與運行java文件的問題 – Mohit

回答

0

是新的DLL的目錄無論是Java應用程序的工作目錄,在系統PATH變量,或在「的java.library.path」 JVM變量?如果不是,則會拋出此異常,因爲JVM將無法找到該DLL。

雖然我不確定你得到的錯誤信息格式是什麼意思。通常情況下,如果JVM無法找到某個庫,則該錯誤類似UnsatisfiedLinkError: no library_name in java.library.path,但您的是不同的。

+0

我的dll文件是在我編譯java和.c文件(即同一目錄)的文件夾中, 。我用也是同樣的錯誤。 – Mohit

+0

但是你在這個目錄下還是在另一個目錄下運行Java應用程序?嘗試使用'-Djava.library.path =「。」'在應用程序的工作目錄中運行帶有DLL的Java應用程序,並查看發生了什麼。注意:我剛剛提到的庫路徑不是空的,但最後發佈的路徑是空的。 –

+0

親愛的,我在這裏提到它是空的來總結它。我使用它像'> java -Djava.library.path =「C:/ Documents and Settings/User/Desktop/Native」Main「 – Mohit

相關問題