2016-11-07 263 views
4

我刚从NDK的12.x更新到13.x,现在我得到以下崩溃引用:UnsatisfiedLinkError:dlopen的失败:无法找到符号“__aeabi_memcpy4”由

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有关的一些类似的问题,所有的建议都是在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 

回答

1

好吧,我想我已经想通了与JNI and Gradle in Android Studio的帮助和Android 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而不是minSdkVersion中具有相同的api级别。

随着com.android.tools.build:gradle:2.2.0这可以通过添加以下操作来实现(详情请查看JNI SO后如上所述):

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

而且,你可能并不需要两个步骤一和二,但我花了太多的时间在这个已经验证

+0

非常感谢你分享你的知识。这对我有用.. –

相关问题