LOCAL_SHARED_LIBRARIES崩溃我的应用

时间:2017-06-20 13:36:28

标签: java android c++ android-ndk

我正在尝试使用NDK在我的Android应用程序(4.4)中使用C库(apriltag)。 我使用android工具链预建了库。 之后,我按照本教程(link)在我的C ++模块中使用了apriltag。

我的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 /.../ libapriltag.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设备上启动。

提前谢谢。

2 个答案:

答案 0 :(得分:0)

因为您使用的是预建的共享库libapriltag.so。你必须让gradle将它添加到你的apk中,然后你可以将它用于gle_main。您必须将此行添加到module / build.gradle脚本

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

答案 1 :(得分:0)

最后,我决定将所有源文件放在我的项目中,以便使用Android Studio进行构建,而不是使用外部工具链。