LOCAL_SHARED_LIBRARIES崩溃我的应用程序
问题描述:
我想在使用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的设备。
预先感谢您。
答
最后,我决定把所有的源文件在我的项目与外部工具链entierely与Android Studio并没有建立它。
答
因为你使用的是预建的共享库,libapriltag.so
。你必须让gradle将它添加到你的apk中,然后你可以使用它进入gle_main
。你有这行添加到您的模块/脚本的build.gradle
android{
sourceSets.main{
jniLibs.srcDir 'path_to_libapriltag'
}
谢谢您的时间。我添加了
jniLibs.srcDirs = ['src/main/jniLibs']
,但没有任何变化。 –