2017-06-20 15 views
0

Ich versuche, eine C-Bibliothek (Apriltag) in meiner Android-App (4.4) mit dem NDK zu verwenden. Ich prebuilt die Bibliothek mit der Android-Toolchain. Danach folgte ich diesem Tutorial (link), um Apriltag in meinem C++ - Modul zu verwenden.LOCAL_SHARED_LIBRARIES stürzt meine App

Mein android.mk:

include $(CLEAR_VARS) 
LOCAL_MODULE := apriltag_prebuilt_lib 
LOCAL_SRC_FILES := $(LOCAL_PATH)/prebuilt/libapriltag.so 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := gle_main 
... 
LOCAL_LDLIBS := -landroid -llog -lEGL -lGLESv2 
LOCAL_SHARED_LIBRARIES += apriltag_prebuilt_lib 
LOCAL_STATIC_LIBRARIES := cpufeatures android_native_app_glue ndk_helper 

aber sobald ich es in einem anderen Modul zu verweisen, kann meine App nicht einmal starten. Android-Monitor sagt mir, dass der Prozess gestorben ist. Wenn ich die Zeile LOCAL_SHARED_LIBRARIES kommentiere, kann ich es starten, aber kann nicht in meinem Modul printag verwenden ...

Auch funktioniert es auf Android 7. Mit diesem Gerät bekomme ich den ungültigen DT_NEEDED Eintrag "app/build /.../ libapriltag.so "Fehler für libgle_main.so (das C++ Modul, das apriltag verwendet).

Irgendwelche Ideen, damit es auf meinem Android 4.4 Gerät funktioniert?

EDIT 1: ich meine Aktivität hinzugefügt haben:

static { 
    System.loadLibrary("apriltag"); 
    System.loadLibrary("gle_main"); 
} 

Aber jetzt bekomme ich diesen Fehler:

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "sqrt" referenced by "/data/app/com.laas.lumus_app-1/lib/arm/libapriltag.so" 

Ich denke, es auf die Mathematik-Bibliothek verwandt ist so Ich fügte zu meinem gle_main und meinem apriltag_prebuilt_lib hinzu.

LOCAL_LDLIBS += -lm 

Nichts geändert.

Jetzt startet die App nicht auf dem 4.4 UND dem 7.0-Gerät.

Vielen Dank im Voraus.

Antwort

0

schließlich hinzuzufügen, entschied ich mich alle Quelldateien in meinem Projekt um es mit Android Studio und nicht mit der externen Werkzeugkette entierely zu bauen.

0

Da Sie eine vordefinierte gemeinsame Bibliothek verwenden, libapriltag.so. Sie müssen es auch Ihrer Apk hinzufügen und dann können Sie es in gle_main verwenden. Sie haben die folgende Zeile in Ihrem Modul/build.gradle Skript

android{ 
    sourceSets.main{ 
     jniLibs.srcDir 'path_to_libapriltag' 
} 
+0

Vielen Dank für Ihre Zeit. Ich habe jniLibs.srcDirs = ['src/main/jniLibs'] hinzugefügt, aber nichts hat sich geändert. –

Verwandte Themen