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

#android #android-ndk

#Android #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.

Ответ №1:

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

‘LOCAL_PATH := $(вызовите my-dir)____’

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

Комментарии:

1. Да, это определенно кому-то помогло! Мои волосы благодарят вас (я собирался начать дергать их в отчаянии)! 🙂

2. Хороший улов! Было бы неплохо сообщить об этом как об ошибке Android, поскольку это все еще происходит с версией NDK 7.

3. Мне действительно интересно, как это происходит! Огромное спасибо за решение!

4. Не знаю, как вы, но я скопировал вставку из руководства, которое, очевидно, содержит некоторые скрытые пробелы. Хороший улов.

5. Отличный улов. мне это очень помогло. Спасибо

Ответ №2:

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

Не совсем ответ для OP, но я думаю, это может избавить других от пустой траты времени.

Ответ №3:

Другая проблема, которую я обнаружил, которая вызывает эту ошибку, заключается в том, что

 LOCAL_SRC_FILES := native.c
  

и

 LOCAL_MODULE    := native
  

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

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

Ответ №4:

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

Android.mk

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

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

Ответ №5:

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

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

Ответ №6:

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

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

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

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

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

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