Android NDK: нет правил для создания цели

Я пытаюсь создать простое приложение для Android, используя NDK. Вот содержимое моего Android.mk

LOCAL_PATH := $(call my-dir)  

include $(CLEAR_VARS)  

LOCAL_LDLIBS := -llog  

LOCAL_MODULE    := myNDK
LOCAL_SRC_FILES := native.c

include $(BUILD_SHARED_LIBRARY)

И когда я запускаю ndk-build, я получаю:

make: * Нет правил для создания цели '/native.c', needed by '/Users/ivan/Documents/workspace/TestNDK/obj/local/armeabi/objs/myNDK/native.o. Стоп.

Так что проблема, очевидно, в том, что make ищет исходные файлы в корневом каталоге, и если я копирую native.c в свою корневую папку, все работает отлично.

Вопрос в том, что я должен указать в моем Android.mk, чтобы установить LOCAL_PATH для моей рабочей папки jni.

6 ответов

Решение

Хорошо, я решил свою проблему, и причина была очень странной: проблема в первой строке

'LOCAL_PATH:= $(позвоните в мою директорию)____'

В конце было несколько пробелов (я заменил их на '_'). Если вы удалите их, все работает просто отлично.

Надеюсь, что это помогает кому-то еще.

В Mac OS X, использующей 64-разрядную версию android-ndk-r9, удалите пробелы из пути NDK. Это исправило правило "Нет", чтобы сделать целевую ошибку для меня

Не совсем ответ для ОП, но я думаю, что это может спасти других от потери времени.

Другая проблема, с которой я столкнулся, заключается в том, что

LOCAL_SRC_FILES := native.c

а также

LOCAL_MODULE    := native

используйте то же имя. Я не уверен, почему это вызывает ошибку, так как код должен быть сгенерирован в разных местах, как native.o, native.od и native. Но, по-видимому, это так.

Я узнал об этом, пытаясь скомпилировать hello.c в hello. Как только я изменил hello.c на main.c, все скомпилировалось правильно.

Убедитесь, что LOCAL_PATH находится в верхней части Android.mk, иначе он не будет работать из-за синтаксиса компилятора GNU.

Android.mk

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

Также может быть ifeq/endif до этого, если нужно, чтобы ndk-major-по крайней мере укорачивал путь или определял функцию.

Я столкнулся с этой проблемой, когда в имени корневого каталога есть орфографическая ошибка.

Пример: Мой путь должен был быть:

 include $(phone-root-dir)/test/test.mk

но есть орфографическая ошибка, как показано

include $(lphone-root-dir)/test/test.mk

Как только я исправил орфографическую ошибку, все заработало.

Если в файле Android.mk есть какая-либо синтаксическая ошибка, правила для целевой ошибки не будет.

У меня такая же проблема.

Другие вопросы по тегам