Невозможно найти заголовочные файлы - Android NDK - PullRequest
13 голосов
/ 04 января 2011

Я создаю нативный API для Android от NDK.

Но при его создании не удается найти заголовочные файлы.

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

project / 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)

project / jni / prereqs /

Android.mk (используется для вызова всех подкаталогов файлов Android.mk)

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

project / 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% есть папка включения.

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

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

Ответы [ 4 ]

15 голосов
/ 10 января 2011

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

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include-all

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

12 голосов
/ 03 апреля 2012

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

Вот примерв NDK, называемом «module-exports». В нем показано, как создать файл 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)
4 голосов
/ 17 мая 2013

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

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

LOCAL_EXPORT_C_INCLUDE_DIRS  := $(MY_DIRECTORY_PATH)

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

LOCAL_EXPORT_C_INCLUDE_DIRS  := $(LOCAL_PATH)/foo
1 голос
/ 08 апреля 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...