gpt4 book ai didi

android-ndk - Android将许多静态库链接到共享库中

转载 作者:行者123 更新时间:2023-12-04 22:47:27 27 4
gpt4 key购买 nike

我有 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)

最佳答案

您需要定义一个 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 的名称.我很惊讶它没有提供有关缺少模块的警告,但它是与您的问题相对应的最有可能的解释。

关于android-ndk - Android将许多静态库链接到共享库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21380646/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com