Android ndk 调用第三方so出现 Cannot load library: reloc_library ...cannot locate问题
需要在android应用中调用第三方动态库:ccc.so,目录结构为
jni
--prebuild
---Andriod.mk
---ccc.so
--Android.mk
--com_xxx_jni.c
--com_xxx_jni.h
--Inteerface.h(ccc.so中的接口文件)
--其他.c .h文件(用于实现逻辑处理)
prebuild下面的Android.mk文件内容为:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ccc
LOCAL_SRC_FILES := ccc.so
TARGET_PRELINK_MODULES := false
include $(PREBUILT_SHARED_LIBRARY)
jni下面的Android.mk文件内容为:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := testJni
LOCAL_SRC_FILES := com_xxx_jni.c \
a.c\
b.c\
...
LOCAL_EXPORT_C_INCLUDES := com_xxx_jni.h\
Interface.h\
a.h\
b.h\
...
LOCAL_SHARED_LIBRARIES := ccc
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
include $(LOCAL_PATH)/prebuilt/Android.mk
ndk编译正常通过,
java的native接口load代码为:
static{
System.loadLibrary("ccc");
System.loadLibrary("testJni");
}
能够load ccc库,但是load testJni的时候就出现错误了,如下:
01-01 10:37:20.835: E/AndroidRuntime(493): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1311]: 1168 cannot locate 'Picc_Open'...
01-01 10:37:20.835: E/AndroidRuntime(493): at java.lang.Runtime.loadLibrary(Runtime.java:434)
01-01 10:37:20.835: E/AndroidRuntime(493): at java.lang.System.loadLibrary(System.java:554)
01-01 10:37:20.835: E/AndroidRuntime(493): at com.hgz.testjni.NativeECInterface.<clinit>(NativeECInterface.java:18)
其中"Picc_Open"是Interface.h文件中的接口函数,具体实现是被封装在ccc.so中了。
有没有哪位朋友遇到过这种情况,或者知道这种情况如何解决?
ndk reloc_library cannot locate 第三方so --------------------编程问答-------------------- 如果ccc库中的函数只由testJni调用,没必要在static中加载ccc;还有确保ccc库有放到/out/.../system/ccc_in...下;拷贝动态库到out目录下,可以用如下方式:
include $(CLEAR_VARS)
LOCAL_PREBUILD_LIBS := $(LOCAL_PATH)/../lib/libkehdevRuntime.so
include $(BUILD_MULTI_PREBUILD)
补充:移动开发 , Android