Не удалось найти файлы заголовков - Android NDK

Я переношу собственный API на Android с помощью NDK.

Но при построении он не находит файлы заголовков.

У меня есть следующая структура.

Проект/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)

И там есть папка include в каждой папке% lib%.

При использовании ndk-build я получаю "/home/marcos/dev/workspace/rmsdk.native.wraper/jni/DelegateDRMProcessorClient.h:18:20: error: dp_all.h: Нет такого файла или каталога"

Кто-нибудь знает, как включить этот заголовок в компилятор?

Ответ 1

Я решаю его, получая все заголовки в папке и включая следующую строку в Android.mk

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include-all

Это работает, но не выглядит как лучший подход.

Ответ 2

Я немного опаздываю на эту вечеринку, но столкнулся с той же проблемой и могу ответить на ваш комментарий: "Это работает, но не выглядит как лучший подход"

Здесь образец в NDK, называемый "модуль-экспорт", Он показывает, как создать файл Android.mk, который уважает файлы заголовков, живущие в соответствующих каталогах, а не все, сбрасываемые в один каталог include.

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)

Ответ 3

Спустя годы...

Чтобы экспортировать каталог include вместо отдельных файлов, я использую следующее:

LOCAL_EXPORT_C_INCLUDE_DIRS  := $(MY_DIRECTORY_PATH)

Например, для вышеупомянутого вопроса экспорт для "foo" будет выглядеть так:

LOCAL_EXPORT_C_INCLUDE_DIRS  := $(LOCAL_PATH)/foo

Ответ 4

Для удобства новых пользователей я просто хочу добавить, что переместите все ваши файлы заголовков в папку, которая передается LOCAL_C_INCLUDES: = $(LOCAL_PATH), а затем сохраните android.mk и перезапустите eclipse. Попробовав все вышеперечисленные решения, это сработало для меня.