实际上看起来 NDK 团队开始支持(或停止?),并且在构建系统中有它的痕迹,但缺少一些重要部分。好消息是它很容易实现。
转到 NDK 安装中的“build”目录并搜索 LOCAL_STATIC_LIBRARIES 的所有实例。复制并粘贴所有这些,然后添加一个与 LOCAL_STATIC_WHOLE_LIBRARIES 执行相同操作的版本。
准确地说:在 build/core/build-binary.mk 中,您需要:
LOCAL_STATIC_LIBRARIES := $(call strip-lib-prefix,$(LOCAL_STATIC_LIBRARIES))
LOCAL_STATIC_WHOLE_LIBRARIES := $(call strip-lib-prefix,$(LOCAL_STATIC_WHOLE_LIBRARIES))
[...]
static_libraries := $(call map,static-library-path,$(LOCAL_STATIC_LIBRARIES))
static_whole_libraries := $(call map,static-library-path,$(LOCAL_STATIC_WHOLE_LIBRARIES))
[...]
$(call module-add-static-depends,$(LOCAL_MODULE),$(LOCAL_STATIC_LIBRARIES))
$(call module-add-static-depends,$(LOCAL_MODULE),$(LOCAL_STATIC_WHOLE_LIBRARIES))
[...]
$(LOCAL_BUILT_MODULE): $(static_libraries) $(static_whole_libraries) $(shared_libraries)
[...]
$(LOCAL_BUILT_MODULE): PRIVATE_STATIC_LIBRARIES := $(static_libraries)
$(LOCAL_BUILT_MODULE): PRIVATE_WHOLE_STATIC_LIBRARIES := $(static_whole_libraries)
请注意 STATIC_WHOLE 和 WHOLE_STATIC 之间的差异 - 这就是 NDK 中的差异,即使不一致,我也选择保持这种方式。
现在,最后,在 build/toolchains/arm-eabi-4.4.0/setup.mk 中:已经有用于共享库的 PRIVATE_WHOLE_STATIC_LIBRARIES 块。您也可以选择为可执行文件添加它,尽管这很可能不是必需的。