使用JNI时出现不满意的链接器错误

时间:2010-07-20 22:36:41

标签: dll java-native-interface linker-errors

我编写了一个Java类,它通过Jni访问C dll中的方法。

但我在Windows中收到以下错误。

  

java.lang.UnsatisfiedLinkError中:   Server.getNetworkDiagram(Ljava /郎/字符串; Ljava /郎/字符串; Ljava /郎/字符串;)Ljava /郎/字符串;

猜猜它能够加载库。

此外,我正在从一组常见的C文件构建.dll(用于Windows)和.so(用于Linux) 这适用于.so文件,我没有收到任何错误。

你能帮帮我吗?

我如何在这里调试?

谢谢, 苏达

不确定它是否拼写错误,因为它适用于linux。

以下是头文件和Java文件。

======

JNI文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Server */

#ifndef _Included_Server
#define _Included_Server
#ifdef __cplusplus
extern "C" {
#endif
#undef Server_GETNETWORK
#define Server_GETNETWORK 1L
#undef Server_SETLEVEL
#define Server_SETLEVEL 2L
/*
 * Class:     Server
 * Method:    getNetworkDiagram
 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_Server_getNetworkDiagram
  (JNIEnv *, jobject, jstring, jstring, jstring);

/*
 * Class:     Server
 * Method:    setLevelQuery
 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;)Z
 */
JNIEXPORT jboolean JNICALL Java_Server_setLevelQuery
  (JNIEnv *, jobject, jstring, jstring, jstring, jint, jint, jstring);

#ifdef __cplusplus
}
#endif
#endif

=========
Java File
=========
public class Server
{
    public native String getNetworkDiagram(String domain, String dest, String secret);

    public void test()
    {
        String domain = "domain1";
        String host = "2.2.2.30";
        String secret = "test";

        System.loadLibrary("libewapi");     
        String result = this.getNetworkDiagram(domain, host, secret);           
    }

    public static void main(String argv[]) throws Exception
    {                   
        Server server = new Server();
        server.test();
    }
}

1 个答案:

答案 0 :(得分:0)

您有可能以不同的名称引用该库,可能拼写错误?或者jni.h文件或java类上的两个函数名都不对应。

你可以在jni.h文件和java本机方法实现中发布函数声明吗?