我正在通过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:没有这样的文件或目录”
任何人都知道如何将这些标题包含在编译器中?
答案 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。在尝试了所有上述解决方案后,这对我有用。