UnsatisfiedLinkError:dlopen失败:无法找到引用的符号“__aeabi_memcpy4”

时间:2016-11-07 15:28:31

标签: android android-ndk

我刚刚从NDK 12.x更新到13.x,现在我遇到了以下崩溃:

Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "__aeabi_memcpy4" referenced by "/data/app/com.app.myapp-1/lib/arm/libJniBitmapOperationsLibrary.so"...
  at java.lang.Runtime.loadLibrary(Runtime.java:372)
  at java.lang.System.loadLibrary(System.java:1076)
  at com.jni.bitmap_operations.JniBitmapHolder.<clinit>(JniBitmapHolder.java:11)
  <...>

我正在使用的库here

我在cannot locate symbol上看到了与SO有关的一些类似问题,所有建议都围绕在APP_PLATFORM文件中设置Application.mk。我的JNI库是SDK的一部分,因此我没有Application.mk文件 - 仅Android.mk。我的目标/分钟sdk最近没有变化。我的Android.mk文件是从库中复制的,如下所示:

LOCAL_PATH := $(call my-dir)

#bitmap operations module
include $(CLEAR_VARS)

LOCAL_MODULE    := JniBitmapOperationsLibrary
LOCAL_SRC_FILES := JniBitmapOperationsLibrary.cpp
LOCAL_LDLIBS := -llog
LOCAL_LDFLAGS += -ljnigraphics

include $(BUILD_SHARED_LIBRARY)
APP_OPTIM := debug
LOCAL_CFLAGS := -g

1 个答案:

答案 0 :(得分:1)

好的,我想我已经在JNI and Gradle in Android StudioAndroid NDK : Getting java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "signal" referenced by "libffmpeg.so"

的帮助下找到了答案

我的解决方案是做以下事情:

1)添加Application.mk文件,内容如下:

APP_CFLAGS += -I$(LOCAL_PATH)  
APP_ABI := all  
APP_PLATFORM := android-19 

2)更新我的build.gradle以指向我的Application.mk,因为显然gradle会创建自己的Android.mk版本,默认为与compileSdkVersion中相同的api级别不是minSdkVersion

使用com.android.tools.build:gradle:2.2.0可以通过添加以下内容来实现(有关详细信息,请查看上面提到的JNI SO帖子):

externalNativeBuild {
    ndkBuild {
        path 'src/main/jni/Application.mk'
    }
}

另外,你可能不需要第一步和第二步,但我已经花了太多时间来验证