我有4个静态库libavcodec.a libavutil.a libswscale.a libx264.a
我想将其与libmytest.so
我在Android.mk脚本下面尝试了
LOCAL_PATH := $(call my-dir)
INITIAL_PATH := $(LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := mytest
LOCAL_SRC_FILES := mytest.c
LOCAL_LDLIBS += -llog
LOCAL_WHOLE_STATIC_LIBRARIES := libavutil libavcodec libswscale libx264
include $(BUILD_SHARED_LIBRARY)
mytest.c
从这些库中调用许多函数。这4个库放在PROJECTPATH\jni\
内。
但我得到undefined reference
来自这些库的所有函数。
我尝试了LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
允许我创建共享库,但是当我启动应用程序时,我得到了
01-22 07:15:15.650: E/AndroidRuntime(9655): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1285]: 1868 cannot locate 'avcodec_register_all'...
01-22 07:15:15.650: E/AndroidRuntime(9655): at java.lang.Runtime.loadLibrary(Runtime.java:370)
01-22 07:15:15.650: E/AndroidRuntime(9655): at java.lang.System.loadLibrary(System.java:535)
答案 0 :(得分:3)
如果不从源代码构建库,则需要为每个库定义PREBUILT_STATIC_LIBRARY
,例如。
include $(CLEAR_VARS)
LOCAL_MODULE := avutil
LOCAL_SRC_FILES := $(LOCAL_PATH)/jni/libavutil.a
include $(PREBUILT_STATIC_LIBRARY)
... [重复其他预建库]。
LOCAL_STATIC_LIBRARIES
只能理解模块名称,即stuff that have been declared through their own ndk-build module definition
的名称。我很惊讶它没有提供有关丢失模块的警告,但这是与你的问题相对应的最可能的解释。