我正在使用 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)
我的 spatialite.c 文件包含一些位于应用程序项目文件夹外部文件夹中的头文件。如上所示,我已将该文件夹包含在 LOCAL_C_INCLUDES 中,但是在运行 ndk-build 时,它仍然无法找到这些包含。允许 ndk-build 命令识别这些包含的位置的正确方法是什么。任何帮助将不胜感激。
更新:
我想补充一点,spatialite 本身不需要对 Java 层可见。此后,我将构建另一个使用 spatialite 的模块。我不确定这是否会影响我在 Android.mk 文件中声明模块的方式。
编译器输出如下所示: jni/spatialite.c:102:20: fatal error: geos_c.h: No such file or directory #include
在 spatialite.c 中导入的 .h 文件位于 C:/projects/externalappsdk/include。spatialite.c 和 Android.mk 位于 C:/mobile/myandroidproject/jni/
我的 spatialite.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 向后两级而不是三级。