#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
Как только я исправил орфографическую ошибку, все заработало нормально.