0

以前に動作していたJNIlibがありましたが、何らかの理由で(curcialの変更を認識していません)、次のエラーが発生したため、使用できなくなりました。

スレッド「main」の例外java.lang.UnsatisfiedLinkError:de.ifi.lmu.sommerd.ftsserver.jni.IndexJNIのde.ifi.lmu.sommerd.ftsserver.jni.IndexJNI.loadIndex(Ljava / lang / String;)V .loadIndex(ネイティブメソッド)

これが私のテスト設定です:

package de.ifi.lmu.sommerd.ftsserver.jni;

public class IndexJNI {

    static {
        System.load("/home/XXX/workspace/IndexJNI/resources/newLib.so");
        System.out.println("Loading library worked");
        IndexJNI.loadIndex("");
    }


    public static native void loadIndex(String indexName);
}

そして、ここで.hおよび.cファイルの関連部分:

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

#ifndef _Included_de_ifi_lmu_sommerd_ftsserver_jni_IndexJNI
#define _Included_de_ifi_lmu_sommerd_ftsserver_jni_IndexJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     de_ifi_lmu_sommerd_ftsserver_jni_IndexJNI
 * Method:    loadIndex
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_de_ifi_lmu_sommerd_ftsserver_jni_IndexJNI_loadIndex
  (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif

.cファイル

JNIEXPORT void JNICALL Java_de_ifi_lmu_sommerd_ftsserver_jni_IndexJNI_loadIndex
  (JNIEnv * env, jclass jc, jstring indexName) {
...
}

そしてこれは私のmakefileです:

test_gcc_lib: run_queries.o
    g++ -shared -fPIC run_queries.o SSA.a -o newLib.so
4

1 に答える 1

0

問題は、呼び出しを静的に変更したことでした。そのため、署名が正しくなくなりました。jobjectをjclassに変更する必要がありました。

于 2013-03-25T21:39:58.703 に答える