EDIT3:如果我使用微軟的編譯器從命令行進行編譯,那麼編譯器的標記會導致問題。有誰知道我需要在code :: blocks中更改以解決此問題嗎?運行一個非常簡單的Hello World JNI測試時出現問題
當我運行我的代碼時,我得到一個UnsatisfiedLinkError。加載步驟工作正常,我實際上調用代碼時出現錯誤。
入門的路徑,我的DLL
java -Djava.library.path=E:\Java\JNIHellowWorld\PasswordGenHW\bin\Debug -jar dist\JNIHellowWorld.jar
例外
Exception in thread "main" java.lang.UnsatisfiedLinkError: jnihellowworld.Main.HelloWorld()Ljava/lang/String;
at jnihellowworld.Main.HelloWorld(Native Method)
at jnihellowworld.Main.main(Main.java:16)
Java代碼的
package jnihellowworld;
import java.io.IOException;
public class Main {
public native String HelloWorld() throws Error;
public static void main(String[] args) throws IOException {
try
{
System.loadLibrary("PasswordGenHW");
String test = new Main().HelloWorld(); //errors on this line
System.out.println(test);
System.in.read();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
C++頭
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class jnihellowworld_Main */
#ifndef _Included_jnihellowworld_Main
#define _Included_jnihellowworld_Main
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: jnihellowworld_Main
* Method: HelloWorld
* Signature:()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_jnihellowworld_Main_HelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
C++ CPP
#include "jnihellowworld_Main.h"
#include <jni.h>
JNIEXPORT jstring JNICALL Java_jnihellowworld_Main_HelloWorld
(JNIEnv *env, jobject obj)
{
return env->NewStringUTF("Hello world!");
}
我使用的代碼::塊和海灣合作委員會complle的DLL。
編輯:這裏是DUMPBIN/DLL的出口
2 1 000011D8 [email protected]
EDIT2:簡化項目中用System.loadLibrary()
它在更直接的配置中工作嗎? – biziclop 2011-04-08 19:03:57
嘗試複製dll到當前目錄並使用'System.loadLibrary(「PasswordGenHW」);' – 2011-04-08 19:08:15
仍然有錯誤,我更改了示例代碼以使用loadlibrary。 – 2011-04-08 19:10:21