我正在使用 Android NDK 构建共享库。我包含了 Android.mk 文件中的一个片段,该片段给我带来了一些问题。
LOCAL_PATH := $(call my-dir)
..#other module here
..#other module here
include $(CLEAR_VARS)
LOCAL_MODULE := spatialite
LOCAL_C_INCLUDES := ../../../projects/externalappsdk/include
LOCAL_SRC_FILES := sqlite3.c \
spatialite.c
include $(BUILD_SHARED_LIBRARY)
我的 spaceite.c 文件包含一些位于应用程序项目文件夹外部的文件夹中的头文件。我已将该文件夹包含在 LOCAL_C_INCLUDES 中,如上所示,但在运行 ndk-build 时,它仍然无法找到这些包含。允许 ndk-build 命令识别这些包含文件所在位置的正确方法是什么?任何帮助将不胜感激。
UPDATE:
我想补充一点的是,spatialite 本身不需要对 Java 层可见。此后我将构建另一个使用 spaceite 的模块。我不确定这是否会对我在 Android.mk 文件上声明模块的方式产生影响。
编译器输出如下所示:
jni/spatialite.c:102:20: 致命错误: geos_c.h: 没有这样的文件或目录
#包括
在spatialite.c 中导入的.h 文件位于C:/projects/externalappsdk/include。 Spatialite.c 和 Android.mk 位于 C:/mobile/myandroidproject/jni/
我的 spaceite.c 文件中的 include 指令如下所示:
#ifndef OMIT_GEOS /* including GEOS */
#include <geos_c.h>
#endif
回答:
我设法利用克里斯提供的答案的帮助来完成这项工作,我已经接受了这个答案。但是,我必须对 Android.mk 文件进行一项更改,如下所示:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := spatialite
LOCAL_C_INCLUDES := ../../projects/externalappsdk/include
LOCAL_SRC_FILES := sqlite3.c \
spatialite.c
include $(BUILD_SHARED_LIBRARY)
请注意,LOCAL_C_INCLUDES 返回两级而不是三级。