【问题标题】:How can I specify output stuffs(like lib<xxx>.so)?如何指定输出内容(如 lib<xxx>.so)?
【发布时间】:2015-09-23 03:05:59
【问题描述】:

Android.mk,我如何指定那些lib&lt;xxx&gt;.so

如果我建立了一个名为libfoo.so的共享库,并且它需要一个外部动态链接库libgnustl_shared.soobj/local/&lt;arch&gt;中可能不存在),当我需要交付我们的产品时(libfoo.so和@987654327 @)。我必须复制(安装)它们。

我的Android.mk 是:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := igslib_rtc_timer
LOCAL_SRC_FILES := ../../../out/lib$(LOCAL_MODULE).so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := igslib_util
LOCAL_SRC_FILES := ../../../out/lib$(LOCAL_MODULE).a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := project

LOCAL_SRC_FILES := \
    ../../main.cpp \

LOCAL_C_INCLUDES += ../../../interface ../../
LOCAL_LDLIBS += -llog
LOCAL_CPP_FEATURES += exceptions

LOCAL_STATIC_LIBRARIES += igslib_util 
LOCAL_SHARED_LIBRARIES += igslib_rtc_timer

include $(BUILD_SHARED_LIBRARY)

install:<libs>
    cp $^ <install_dir>

我需要变量&lt;libs&gt;,它代表libigslib_rtc_timer.solibproject.so。有谁知道吗?

【问题讨论】:

    标签: android android-ndk


    【解决方案1】:

    请看

    Android NDK - make two native shared libraries calling each other

    multiple (my and 3rd-party) native libraries in Android NDK

    Using a prebuilt native binary in android app(有链接)

    基本上,要创建多个库,您只需连接 .mk 文件(或 include 来自主 .mk 的文件)

    include abc.mk
    include xyz.mk
    

    因为每个 .mk 都以 CLEAR_VARS 开头:

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE := abc
    LOCAL_LDLIBS := -llog
    

    它们不会相互影响。在libs/ 中找到的所有内容都将转到 apk。

    您需要按照解决依赖关系的顺序硬编码加载库:

    static { // calling from a static initializer is important!!!
        System.loadLibrary("abc"); // libabc.so does not depend on libxyz.so
        System.loadLibrary("xyz"); // libxyz.so can depend on libabc.so
    }
    

    更新:

    根据multiple (my and 3rd-party) native libraries in Android NDK

    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    LOCAL_MODULE := random
    LOCAL_SRC_FILES := librandom.so
    include $(PREBUILT_SHARED_LIBRARY)
    

    会将现有库从源位置复制到 libs/。您无需指定任何安装步骤,它们始终是相同的:Android 将 apk 中 lib/ 文件夹中的所有内容(是的,这次是 lib,而不是 libs)复制到您应用的文件夹中。

    但有一个例外:这仅适用于用户应用程序,Android 认为对于系统应用程序(通过将它们安装在有根设备上的 /system/app 并由固件制造商放置在无根设备上)库由应用程序制造商安装(即,安装脚本安装库,或者应用程序本身在首次运行时执行此操作,或者库是固件的一部分)。

    【讨论】:

    • 我想知道如何在 Android.mk 中指定它们,而不是如何加载它,谢谢。
    • 您在链接中找到了它,不是吗?如果您同时构建两个库,则为第一个链接,如果库是预构建的,则为第二个;对于系统库LOCAL_LDLIBS := -llog 适用于 liblog.so
    • 我发布了我的Android.mk 并强调了目标,谢谢。
    猜你喜欢
    • 2021-12-28
    • 2011-04-09
    • 2020-02-11
    • 2016-11-03
    • 2019-10-06
    • 2010-09-23
    • 1970-01-01
    • 2011-01-03
    • 2012-08-11
    相关资源
    最近更新 更多