不满意链接错误: dlopen 失败: 找不到引用的符号"__aeabi_memcpy4"



我刚刚从NDK 12更新。X到13。现在我得到以下崩溃:

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)
  <...>

我使用的库可以在这里找到。

我在SO上看到过一些类似的问题,与cannot locate symbol有关,所有的建议都是围绕在Application.mk文件中设置APP_PLATFORM。我的JNI库是SDK的一部分,所以我没有Application.mk文件-只有Android.mk。此外,我的目标/min 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

好的,我想我已经找到了一个答案与JNI和Gradle在Android Studio和Android NDK的帮助:Getting java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "signal"引用自"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'
    }
}

同样,您可能不需要第一步和第二步,但是我已经花了太多的时间来验证

最新更新