Android NDK - 附加包含目录

时间:2014-03-18 15:18:26

标签: android android-ndk android.mk

我正在使用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命令识别这些包含位置的正确方法是什么。任何帮助都会得到很大的帮助。

更新:

我想补充一点,对于Java层来说,spaceite本身是不可见的。之后我将构建另一个使用spatialite的模块。我不确定这是否会对我在Android.mk文件中声明模块的方式产生影响。

编译器输出如下所示: jni / spatialite.c:102:20:致命错误:geos_c.h:没有这样的文件或目录  #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返回两级而不是三级。

2 个答案:

答案 0 :(得分:1)

没有

LOCAL_PATH := $(call my-dir)

在Android.mk的顶部,我无法按照描述构建项目的副本,但是错误与您的报告不同 - 没有该指令,编译器在NDK系统中搜索C源文件目录而不是jni /文件夹。

$ cd mobile/myandroidproject/jni
$ ndk-build
Compile thumb  : spatialite <= spatialite.c
SharedLibrary  : libspatialite.so
Install        : libspatialite.so => libs/armeabi/libspatialite.so

文件:./ mobile / myandroidproject / jni / 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)

文件:./ mobile / myandroidproject / jni / spatialite.c

#include <geos_c.h>

文件:./ mobile / myandroidproject / jni / sqlite3.c

//empty file

文件:./ project / externalappsdk / include / geos_c.h

//empty file

至少应该将LOCAL_PATH行添加到Android.mk

如果这不能解决问题,那么请更新您的问题,看看您的项目结构与我的重新创建之间的差异。

答案 1 :(得分:0)

使用LOCAL_EXPORT_C_INCLUDE_DIRS代替LOCAL_C_INCLUDES