Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Android.mk使用预构建的静态库创建共享库_Android_Android Ndk_Shared Libraries - Fatal编程技术网

使用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

我正在尝试使用预构建的静态库构建一个共享库,下面是相应的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_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,那么构建就完成了