Frage

Wenn ich versuche, meine Klasse in dieser Datei zu implementieren, erhalte ich einen Fehler, der nicht erfüllt ist, aber wenn ich die Implementierung der Broker.H -Klasse entferne, geht es gut. Wieso den?

Broker.h

#include "XletTable.h"

#ifndef BROKER_H_
#define BROKER_H_

class Broker {
private:
    static Broker* brokerSingleton;
    static XletTable *table;

    // Private constructor for singleton
    Broker(JNIEnv *, XletTable *);

    // Get XletTable (Hash Table) that contains the...
    static XletTable* getTable();

public:
    virtual ~Broker();
    static Broker* getInstance(JNIEnv *);
    jobject callMethod(JNIEnv *, jclass, jstring, jobject, jbyteArray);
};

#endif /* BROKER_H_ */

Brokerjni.h

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

#ifndef _Included_Broker
#define _Included_Broker
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Broker
 * Method:    callMethod
 * Signature: (Ljava/lang/String;Ljava/lang/reflect/Method;[B)Ljava/lang/Object;
 */
JNIEXPORT jobject JNICALL Java_Broker_callMethod
  (JNIEnv *, jclass, jstring, jobject, jbyteArray);

#ifdef __cplusplus
}
#endif
#endif
War es hilfreich?

Lösung

Wahrscheinlich verpasst Ihre Bibliothek einen Hinweis auf ein Symbol oder eine andere Bibliothek. Versuchen Sie, main.cpp mit leerer Main () -Funktion zu machen, und verknüpfen Sie sie mit Ihrer Bibliothek - g++ main.cpp -o main -lInterAppCC. Wenn Sie etwas verpassen, gibt Ihnen der Linker eine detaillierte Fehlermeldung.

Ps. Da Ihre Header -Datei den Funktionsprototyp bereits mit dem Function -Prototyp einhüllt extern "C", Sie müssen beim Schreiben nicht das gleiche tun.

Andere Tipps

Sie müssen externe "C" um das Jniexport -Zeug verwenden, um den C ++ - Namen zu vermeiden, der die JNI -Funktionen begleitet.

C ++-Name Mangling Änderungen Funktionsnamen (in den OBJ-Dateien), um die Arten von Parametern, virtuelle usw. einzuschließen, um verschiedene überlastete Funktionen mit demselben Namen zu verknüpfen.

Wickeln Sie also Ihr Jniexport mit externem "C" {...} (schauen Sie sich den JNI-Header an) und stellen Sie sicher, dass Ihr C ++-Code nicht in das gleiche verpackt ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top