NDK неразрешенное включение, но путь находится в local_c_includes для библиотеки обхода

109
15

Я пытаюсь получить библиотеку разбора Bypass Markdown для работы с моим проектом Android.

Я скомпилировал Boost и установил его (потому что это зависимость). Затем я загрузил источник Bypass и импортировал проект Android в качестве библиотеки и включил его в свои собственные свойства проекта в виде библиотеки.

Когда я добавил поддержку NDK проекту и перестроил его, я заметил некоторые ошибки в проекте обхода. Я думаю, что это вызвано unresolved inclusion "parser.h".

Это мой Android.makefile:

LOCAL_PATH := $(call my-dir)
BYPASS_SRC := ../../../../src/

include $(CLEAR_VARS)

LOCAL_MODULE := bypass
LOCAL_SRC_FILES := \
bypass.cpp \
$(BYPASS_SRC)parser.cpp \
$(BYPASS_SRC)document.cpp \
$(BYPASS_SRC)element.cpp \
../../../../dep/libsoldout/markdown.c \
../../../../dep/libsoldout/buffer.c \
../../../../dep/libsoldout/array.c

LOCAL_C_INCLUDES:= ../../../dep/libsoldout ../../../src /opt/local/include /usr/local/include $(BYPASS_INCLUDE_PATH)

include $(BUILD_SHARED_LIBRARY)

Файл parser.h находится в папке ../../../../src/. Я проверил его с самого начала make файла и в этой точной папке, но его не найти. Что может быть причиной этого?

Кстати, это мой первый раз, когда я использую NDK, и у меня практически нет опыта C/C++, поэтому был бы оценен подробный ответ.

спросил(а) 2013-06-09T19:27:00+04:00 7 лет, 4 месяца назад
1
Решение
58

В файле jni/Android.mk мы устанавливаем LOCAL_PATH и указываем LOCAL_SRC_FILES относительно LOCAL_PATH. С другой стороны, список LOCAL_C_INCLUDES содержит каталоги, которые компиляторы C и C++ будут искать для разрешения директив #include в исходных файлах. Эти каталоги относятся к корневому каталогу проекта (обычно на одном уровне выше LOCAL_PATH).

В вашем случае неясно, как вы проверили путь.. /../../../src к parser.h. Это из каталога jni (где находится Android.mk) или из корня проекта?

Еще несколько комментариев о вашем файле Android.mk: потому что вы используете кросс-компилятор, вы не должны искать файлы include в каталоге /opt/local или /usr/local/include.NDK должен предоставить альтернативы platform-. Я не выбираю BIPASS_INCLUDE_PATH.

ответил(а) 2013-06-09T22:50:00+04:00 7 лет, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема