我想從Java調用C子程序。我正在使用JNI。我創建了.java,.c和.h文件,並編譯了一個DLL。所有文件都在同一個文件夾中。但是當我運行該程序時,它顯示一個unsatisfiedlinkError
。我哪裏去錯了...?JNI調用C子程序時出錯
由於我學習JNI,我使用的源代碼是從一個:http://www.ibm.com/developerworks/java/tutorials/j-jni/section2.html,事情我已經嘗試:
- 使用代碼::塊(IDE)和作爲GCC編譯器創建DLL
- 使用GCC命令行創建DLL(參考http://sig9.com/node/35)
- 我使用的Win7 32位,我想最重要的方法生成32位DLL
- 所有我發現創建DLL的解決方案(共享庫)是MS VC/VCPP,我沒有在我的機器上現在。
問題在哪裏?正在生成的DLL文件沒有任何異常,但是當我運行Java代碼時,它會拋出異常。
PS:如果有任何理論上的例子,說明JNI的工作原理和實際它,然後親切地分享鏈接...被拋出
的消息或異常:
c:\myjava1>java Sample1
Exception in thread "main" java.lang.UnsatisfiedLinkError: Sample1.intMethod(I)I
at Sample1.intMethod(Native Method)
at Sample1.main(Sample1.java:11)
很多時候創建dll文件後的一天結束時,我很確定它可能沒有問題,路徑有問題...我已將加載庫方法更改爲負載方法,但仍沒有運氣,......
由一個MOD建議: 我一直在討論有關的帖子這樣一個問題:JNI錯誤而調用C子程序,我張貼在這裏所有的代碼的註釋具有有限的字符... Sample1.c
#include "jni.h"
#include"Sample_Sample1.h"
JNIEXPORT jint JNICALL Java_Sample_Sample1_test(JNIEnv *env, jobject obj){
return(1);
}
void main(){}
Sample1.java
package Sample;
public class Sample1
{
public native int test();
static{
System.loadLibrary("Sample1");
}
public static void main(String[] args)
{
Sample1 sample = new Sample1();
System.out.println(sample.test());
}
}
Sample_Sample1.h(使用產生JAVAH -j NI指令)
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class Sample_Sample1 */
#ifndef _Included_Sample_Sample1
#define _Included_Sample_Sample1
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Sample_Sample1
* Method: test
* Signature:()I
*/
JNIEXPORT jint JNICALL Java_Sample_Sample1_test
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
任何人都可以指導我,其中的問題是什麼?在我提到,我使用的代碼是從教程的一個以前的職位,但simplyfy的事情我已經改變了代碼...雖然使用Java的** Sample.Sample1" 我得到:
C:\ myjava1>的Java Sample.Sample1 異常線程 「main」 java.lang.UnsatisfiedLinkError中:Sample.Sample1.test()我 在樣品。 Sample1.test(Native Method) at Sample.Sample1.main(Sample1.java:12)
所有的代碼(.c和.java)都是從帖子中提到的鏈接中取得的,仍然重複着: –
buch11
錯誤是什麼?是不是Java找不到你的庫(loadLibrary調用失敗),還是Java找不到你的方法?檢查您的DLL是否導出正確的名稱,例如使用依賴walker http://www.dependencywalker.com/。 – lmz
拋出*什麼*異常?用什麼信息?這裏沒有足夠的信息。 – EJP