Неудовлетворенная ошибка компоновщика при использовании JNI - PullRequest
0 голосов
/ 21 июля 2010

Я написал класс Java, который обращается к методу в Cll через Jni.

Но я получаю следующую ошибку в Windows.

java.lang.UnsatisfiedLinkError: Server.getNetworkDiagram (Ljava / языки / String; Ljava / языки / String; Ljava / языки / String;) Ljava / языки / String;

Думаю, она может загрузить библиотеку.

Также я собираю .dll (для windows) и .so (для linux) из набора общих файлов C Это работает с .so файлом, и я не получаю никакой ошибки.

Не могли бы вы мне помочь?

Как мне здесь отладить?

Спасибо, Sudarshan

Не уверен, что это ошибка, потому что она работает в 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 голосов
/ 21 июля 2010

есть вероятность, что вы ссылаетесь на библиотеку под другим именем, может быть с ошибкой?или оба имени функций в файле jni.h или в классе java не соответствуют.

не могли бы вы опубликовать объявление функции в файле jni.h и реализацию метода java native?

...