2017-06-20 134 views
0

我想在使用NDK我的Android應用(4.4)使用C庫(apriltag)。 我使用android toolchain預建了庫。 在那之後,我跟着這個教程(link)在我的C++模塊使用apriltag。LOCAL_SHARED_LIBRARIES崩潰我的應用程序

我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 

然而,當我引用它在另一個模塊,我的應用程序不能甚至開始。 Android監視器告訴我,進程已經死亡。如果我評論線LOCAL_SHARED_LIBRARIES我可以啓動它,但不能在我的模塊中使用apriltag ...

此外,它適用於Android 7.使用此設備,我得到無效的DT_NEEDED條目「app/build /.../ libpgriltag.so「錯誤libgle_main.so(使用apriltag的C++模塊)。

任何想法得到它我的Android 4.4的設備嗎?

編輯1: 我已經添加到我的活動:

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

但現在,我得到這個錯誤:

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

我想這是關係到數學庫,以便我添加到我的gle_main和我的apriltag_prebuilt_lib

LOCAL_LDLIBS += -lm 

沒有什麼變化。現在

,應用犯規開始對4.4和7.0的設備。

預先感謝您。

回答

0

最後,我決定把所有的源文件在我的項目與外部工具鏈entierely與Android Studio並沒有建立它。

0

因爲你使用的是預建的共享庫,libapriltag.so。你必須讓gradle將它添加到你的apk中,然後你可以使用它進入gle_main。你有這行添加到您的模塊/腳本的build.gradle

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

謝謝您的時間。我添加了jniLibs.srcDirs = ['src/main/jniLibs'],但沒有任何變化。 –