使用Android.mk使用预构建的静态库创建共享库
我正在尝试使用预构建的静态库构建一个共享库,下面是相应的Android.mk文件使用Android.mk使用预构建的静态库创建共享库,android,android-ndk,shared-libraries,Android,Android Ndk,Shared Libraries,我正在尝试使用预构建的静态库构建一个共享库,下面是相应的Android.mk文件 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) #Include kerne headers in a proper way later on #LOCAL_C_INCLUDES:= $(LOCAL_PATH)/../../../../kernel/include LOCAL_MODULE := sensors.$(TARGET_BOARD_PLATFORM
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#Include kerne headers in a proper way later on
#LOCAL_C_INCLUDES:= $(LOCAL_PATH)/../../../../kernel/include
LOCAL_MODULE := sensors.$(TARGET_BOARD_PLATFORM)
LOCAL_MODULE_TAGS := optional
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
LOCAL_STATIC_LIBRARIES := LibFusion_ARM_cpp
#LOCAL_LDFLAGS := $(LOCAL_PATH)/LibFusion_ARM_cpp.a
LOCAL_SHARED_LIBRARIES := liblog libcutils
#include any shared library dependencies
LOCAL_LDFLAGS := $(LOCAL_PATH)/libimu.a
LOCAL_PRELINK_MODULE := false
LOCAL_SRC_FILES := sensors_u8500.cpp
include $(BUILD_SHARED_LIBRARY)
文件夹中存在的文件是
Android.mk、LibFusion\u ARM\u cpp.a、libimu.a、MEMSAlgLib\u eCompass.h、sensors\u u8500.cpp
当建筑在下面时,我得到的错误
**make: *** No rule to make target `out/target/product/u8500/obj/STATIC_LIBRARIES/LibFusion_ARM_cpp_intermediates/LibFusion_ARM_cpp.a', needed by `out/target/product/u8500/obj/SHARED_LIBRARIES/sensors.montblanc_intermediates/LINKED/sensors.montblanc.so'. Stop.**
这里的问题是什么
无法生成共享库。我的意思是无法生成libsensor.so文件。面对上述错误。**make:*没有规则生成目标生成系统似乎无法找到
LibFusion\u ARM\u cpp.a
。好的,您必须首先使用LibFusion\u ARM\u cpp.a
设置为LOCAL\u SRC\u FILES
和LOCAL\u module
设置为LibFusion\u ARM\u cpp
指定一个预构建的库模块。这将基本上将指定的静态库复制到构建系统搜索所有必要模块的默认目录中 为了理解这个案例,我做了两件事:
A.在上面显示的make文件中,我添加了以下内容,以确保将这个.A文件复制到构建中
include $(CLEAR_VARS)
LOCAL_MODULE := LibFusion_ARM
LOCAL_SRC_FILES := LibFusion_ARM_cpp.a
include $(BUILD_STATIC_LIBRARY)
当我使用mm-n
命令构建它时,我看到LibFusion\u ARM.a的这个奇怪的语句rm-f…
。当然,构建失败了,因为它无法定位静态库
mkdir -p out/target/product/u8500/obj/STATIC_LIBRARIES/LibFusion_ARM_intermediates/
rm -f out/target/product/u8500/obj/STATIC_LIBRARIES/LibFusion_ARM_intermediates/LibFusion_ARM.a
echo "target StaticLib: LibFusion_ARM (out/target/product/u8500/obj/STATIC_LIBRARIES/LibFusion_ARM_intermediates/LibFusion_ARM.a)"
mkdir -p out/target/product/u8500/obj/SHARED_LIBRARIES/sensors.montblanc_intermediates/LINKED/
.
.
为什么会发生这种删除?我不确定。这就是问题的根源。请提供建议
B.我在make文件中添加了以下行:
include $(CLEAR_VARS)
LOCAL_MODULE := LibFusion_ARM
LOCAL_SRC_FILES := LibFusion_ARM_cpp.a
include $(PREBUILT_STATIC_LIBRARY)
我看到以下错误:
make: *** No rule to make target `out/target/product/u8500/obj/STATIC_LIBRARIES/LibFusion_ARM_intermediates/LibFusion_ARM.a', needed by `out/target/product/u8500/obj/SHARED_LIBRARIES/sensors.montblanc_intermediates/LINKED/sensors.montblanc.so'.
Stop.
显然,在第二种情况下,LibFusion_ARM文件没有被复制(甚至没有创建obj/STATIC_LIBRARIES/LibFusion_ARM_intermediates
目录)。
无需强调,如果我手动将文件LibFusion_ARM_cpp.a复制为LibFusion_ARM.a,那么构建就完成了