2017-06-20 258 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'],但没有任何变化。 –