Android NDK C ++ JNI (keine Implementierung für native ... gefunden)
Ich versuche, das NDK mit C++ und kann nicht scheinen, um die Methode naming convention richtig. meine native Methode ist wie folgt:
extern "C" {
JNIEXPORT void JNICALL Java_com_test_jnitest_SurfaceRenderer_drawFromJni
(JNIEnv* env, jclass c)
{
//
}
}
mit header verpackt in extern "C" {} aslo.
Alles kompiliert fein, schafft eine .also Datei und kopiert den Ordner libs unter mein Projekt, aber wenn ich Debuggen und ausführen in Eclipse bekomme ich immer eine log-Katze-Nachricht, die von "keine Umsetzung gefunden für native...". Gibt es etwas ich ' m fehlen, wie alle NDK-Beispiele sind in C?
Dank.
InformationsquelleAutor der Frage Patrick Kafka | 2010-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein paar Dinge, die kann dazu führen, dass "keine Umsetzung gefunden". Ist man den Funktionsprototyp Namen falsch, eine andere wird nicht geladen .also an alle. Sind Sie sicher, dass
System.loadLibrary()
wird aufgerufen, bevor die Methode eingesetzt wird?Wenn Sie nicht über eine
JNI_OnLoad
Funktion definiert, die Sie erstellen möchten, und haben es spuckte eine log-Meldung, nur um sicher zu gehen, dass die lib immer zog erfolgreich.Du schon wich das häufigste problem ist -- vergessen zu verwenden
extern "C"
- also, es ist entweder die oben genannten oder einige leichte Rechtschreibfehler. Was macht der Java-Deklaration Aussehen?InformationsquelleAutor der Antwort fadden
Eine weitere Ursache für diesen Fehler: Ihre stramme native Methode muss der name nicht mit einem Unterstrich enthalten!
Zum Beispiel wollte ich den export einer C-Funktion namens
AudioCapture_Ping()
. Hier meine export-Deklaration in C:Hier war meine Java Klasse importieren die Funktion:
Konnte ich nicht bekommen Android dynamisch link zu meiner native-Methode, bis ich entfernt den Unterstrich:
InformationsquelleAutor der Antwort
Ich hatte das gleiche problem, aber mir war der Fehler in der Datei Android.mk. Ich hatte es:
aber sollte es haben:
beachten Sie die detail += statt :=
Ich hoffe, das hilft.
InformationsquelleAutor der Antwort ademar111190
Einen weiteren Grund: die Verwendung LOCAL_WHOLE_STATIC_LIBRARIES statt LOCAL_STATIC_LIBRARIES in android.mk. Das hält die Bibliothek von der Optimierung von nicht benötigten API-Aufrufe, da das NDK kann nicht erkennen, die Verwendung der nativen Bindungen von java-code.
InformationsquelleAutor der Antwort John Twigg
Es ist ein cpp Beispiel unter apps in ndk:
https://android.googlesource.com/platform/development/+/marshmallow-release/ndk/platforms/android-5/samples/hello-gl2/jni/gl_code.cpp
InformationsquelleAutor der Antwort Megha
Aufgerufen extern "C" wie in der automatisch generierten Studio Beispiel, aber vergessen zu wickeln den gesamten rest der Datei, einschließlich der folgenden Funktionen, die in {} Klammern. Nur die erste Funktion gearbeitet.
InformationsquelleAutor der Antwort DragonLord
Verwenden javah (Teil des Java-SDK). Sein Werkzeug genau für diesen generiert .h-header aus .class-Datei).
InformationsquelleAutor der Antwort MartinH
Ich versuche, alle oben genannten Lösungen, aber niemand kann gelöst meine build-Fehler(jni-java.lang.UnsatisfiedLinkError: Keine Umsetzung gefunden...),
endlich fand ich, dass ich vergessen habe, um meinen verify.cpp Quell-Datei CMakeList.txt add_library segement(verify.cpp ist automatisch erstellen, indem Sie Strg + EINGABETASTE, kurz-Taste, eventuell auch andere Datei-name), hoffe, dass meine Antwort helfen können einige.
meine build-Umgebung: Gradle + CMake
InformationsquelleAutor der Antwort user2420449
Ich Stand vor dem gleichen problem, und in meinem Fall der Grund war, dass ich hatte, Unterstrich in den Paket-Namen "RFID_Test"
Umbenannt habe ich das Paket und es funktionierte.
Dank user1222021
InformationsquelleAutor der Antwort F.sh
Wenn Ihr Paket-name enthält Zeichen _ enthalten, so schreiben Sie bitte(1) nach dem _ - Zeichen, wie unten dargestellt:
MainActivity.java
native-lib.cpp
InformationsquelleAutor der Antwort oiyio