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 есть какая-либо синтаксическая ошибка, правила для целевой ошибки не будет.
У меня такая же проблема.