Включая встроенную статическую библиотеку в систему сборки Android - PullRequest
6 голосов
/ 15 апреля 2011

Мне нужно собрать разделяемую библиотеку на основе готовой статической библиотеки. Мой make-файл src / android / external / mycode / Android.mk:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_ARM_MODE := arm
LOCAL_MODULE := libMyStatic
LOCAL_SRC_FILES := libStatic.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_ARM_MODE := arm
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE    := libMyShared
LOCAL_WHOLE_STATIC_LIBRARIES := libMyStatic
include $(BUILD_SHARED_LIBRARY)

Я строю это, делая: mmm external/mycode и получите ошибку:

make: *** No rule to make target `out/target/product/generic/obj/STATIC_LIBRARIES/libMyStatic_intermediates/libMyStatic.a', needed by `out/target/product/generic/obj/SHARED_LIBRARIES/libMyShared_intermediates/LINKED/libMyShared.so'.  Stop.
make: Leaving directory `/home/test/src/android'

Если я делаю следующее вручную и снова запускаю mmm, это работает:

cp external/mycode/libStatic.a out/target/product/generic/obj/STATIC_LIBRARIES/libMyStatic_intermediates/libMyStatic.a

Если я создаю проект NDK и использую этот файл Android.mk, я думаю, что он сразу работает при вызове скрипта ndk-build. Таким образом, проблема связана с тем, что файл libMyStatic.a не создается и не копируется в промежуточную папку, когда я использую систему Android Build. Может кто-нибудь сказать мне, что мне нужно настроить, чтобы система сборки скопировала статическую библиотеку в промежуточную папку?

Ответы [ 2 ]

4 голосов
/ 13 июня 2011

измените ваш файл MK

"LOCAL_WHOLE_STATIC_LIBRARIES := libMyStatic"

на

"LOCAL_LDFLAGS += -lMyStatic
2 голосов
/ 27 января 2015

Попробуйте создать свою статическую библиотеку следующим образом.

include $(CLEAR_VARS)

LOCAL_MODULE := libMyStatic
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
LOCAL_MODULE_SUFFIX := .a
LOCAL_SRC_FILES := libMyStatic.a

include $(BUILD_PREBUILT)
...