无法找到头文件 - Android NDK

时间:2011-01-04 14:48:06

标签: android android-ndk

我正在通过NDK将原生API包装到Android。

但是在构建时却找不到头文件。

我有以下结构。

项目/ JNI

Android.mk

LOCAL_PATH := $(call my-dir)

include $(call all-subdir-makefiles)

LOCAL_PATH :=/home/marcos/dev/workspace/rmsdk.native.wraper/jni

include $(CLEAR_VARS)

LOCAL_LDLIBS := -llog
LOCAL_MODULE    := ndk1
LOCAL_SRC_FILES := native.c DelegateDRMProcessorClient.cpp
LOCAL_STATIC_LIBRARY := adept cryptopenssl dp expat fonts hobbes jpeg mschema png t3 xml zlib

include $(BUILD_SHARED_LIBRARY)

项目/ JNI / prereqs /

Android.mk(用于调用所有子目录Android.mk文件)

LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)
include $(CLEAR_VARS)

项目/ JNI / prereqs /%LIB%/

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    :=dp
LOCAL_SRC_FILES :=libdp.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_STATIC_LIBRARY)

每个%lib%文件夹上都有一个include文件夹。

使用ndk-build时我会得到一个 “/home/marcos/dev/workspace/rmsdk.native.wraper/jni/DelegateDRMProcessorClient.h:18:20:错误:dp_all.h:没有这样的文件或目录”

任何人都知道如何将这些标题包含在编译器中?

4 个答案:

答案 0 :(得分:15)

我解决了这个问题,将所有标题放在一个文件夹中,并在Android.mk中包含以下行

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include-all

这样可行,但看起来不是最佳方法。

答案 1 :(得分:12)

我参加这个派对有点晚了,但遇到了同样的问题,可能会对你的评论有一个答案: “这很有效,但看起来不是最好的方法”

NDK中有一个名为“module-exports”的样本 它展示了如何构建一个Android.mk文件,该文件尊重生活在其正确目录中的头文件,而不是全部转储到单个包含目录中。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := foo/foo.c
LOCAL_CFLAGS := -DFOO=2
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/foo
LOCAL_EXPORT_CFLAGS := -DFOO=1
LOCAL_EXPORT_LDLIBS := -llog
include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := bar
LOCAL_SRC_FILES := bar/bar.c
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar
LOCAL_STATIC_LIBRARIES := foo
include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := zoo
LOCAL_SRC_FILES := zoo/zoo.c
LOCAL_SHARED_LIBRARIES := bar
include $(BUILD_SHARED_LIBRARY)

答案 2 :(得分:4)

多年以后......

要导出include目录而不是单个文件,我使用以下命令:

LOCAL_EXPORT_C_INCLUDE_DIRS  := $(MY_DIRECTORY_PATH)

例如,对于上述问题,“foo”的导出如下:

LOCAL_EXPORT_C_INCLUDE_DIRS  := $(LOCAL_PATH)/foo

答案 3 :(得分:1)

为了新人的方便,我只想添加将所有头文件移动到LOCAL_C_INCLUDES:= $(LOCAL_PATH)引用的文件夹中,然后保存android.mk并重启eclipse。在尝试了所有上述解决方案后,这对我有用。