Что не так с моим make файлом?
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := foo.c
LOCAL_EXPORT_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
foo.c
#include <string.h>
#include <jni.h>
#include <android/log.h>
#define LOG_TAG "foo"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
void test() {
LOGI("test");
}
ndk-build
foo.c:9: undefined reference to `__android_log_print'
ldLibs = ["android", "log"]
в свой android.ndk параметрыВам нужно добавить
на Android.mk
источник
Если вы используете Android Studio и gradle, он игнорирует Android.mk. Добавьте это в свой файл build.gradle:
источник
ldLibs
. Спасибо.ndk
часть в build.gradle внутриapp
папки, а не в папку проекта (имя модуля).ldLibs.addAll(["android", "log"])
Для Android Studio 2.2 и tools.build:gradle:2.2.0 с помощью CMake добавьте или отредактируйте строку в CMakeLists.txt:
Это подключает библиотеку журналов к вашей.
источник
Если вы обновляетесь до Android Studio 2.1, приведенные выше ответы не работают, необходимо использовать ldLibs.add () для загрузки библиотеки, как показано ниже:
источник
Мы можем связать общую библиотеку в Android 3 способами. В следующих трех случаях указанные строки следует добавить в
Android.mk
Итак, вот три способа.
По какой-то причине, если 1 не работает (у меня это не сработало), вы можете попробовать следующие два способа
Конечно, вам также необходимо включить
#include <android/log.h>
в ваш C / H файл.источник
Если проект, над которым вы работаете, имеет следующие характеристики, которые отличаются от других «стандартных» ответов:
Следующее использование target_link_libraries делает это:
Будучи
TARGET_NAME
имя цели , чтобы построить (Поставив его перед сadd_library
илиadd_executable
).find_library
не менее важно, а также правильно настроить цепочку инструментов (используйте цепочку инструментов, предоставляемую Android SDK,ANDROID_SDK_HOME/cmake/<version>/android.toolchain.cmake
чтобы она настраивала,CMAKE_SYSROOT
которая используетсяfind_
командами).источник
Да, вам нужно добавить:
LOCAL_LDLIBS := -llog
как указано в других ответах / комментариях, однако в исходном вопросе не указывалось, использует ли он библиотеку jni как:LOCAL_JNI_SHARED_LIBRARIES
или какLOCAL_REQUIRED_MODULES
.Я могу точно сказать, что он использовал его как:
LOCAL_REQUIRED_MODULES
из-заLOCAL_EXPORT_LDLIBS := -llog
за вопроса в вопросе ... если это не было добавлено после редактирования.Если вы используете
LOCAL_REQUIRED_MODULES
разделяемую библиотеку, она устанавливается в / system / lib вместо apk, потому что это обязательный модуль. Поэтому вам нужно будет добавить,LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
а не простоLOCAL_LDLIBS := -llog
так, чтобы, когда система сборки строит и связывает общую библиотеку jni, у нее были-llog
определения в правильном месте, доступные для сборки$OUT/root/system/lib
. В противном случае вы продолжите получать тот же ответ, даже если добавите толькоLOCAL_LDLIBS := -llog
.Итак, те, кто прокомментировал, что
-L
это не нужно, а другой ответ был правильным, на самом деле были неправильными в этой ситуации.источник
Вместо
использовать
ldLibs.addAll(["android", "log"])
для экспериментального плагинаисточник
Добавить
на Android.mk
источник
Мне это помогло:
Android.mk
источник
В android studio версии 2.2 и выше есть встроенная поддержка CPP при создании нового проекта. Кроме того, по умолчанию включен liblog.so. Ничего не нужно делать, кроме включения файла заголовка (android / log.h).
Приложение Checkout / CMakeLists.txt, которое создается студией при создании нового проекта студии Android. Мы видим, что блоки find_library () и target_link_libraries () для loglib уже присутствуют.
Также обратите внимание на синтаксис функции. Так должно быть:
В моем случае я пропустил параметр тега и в итоге потратил 3 дня на его выяснение.
Подробнее о CMake: добавьте код C и C ++ в свой проект
источник
-DCMAKE_CXX_FLAGS = "- llog" мне помогает
источник
добавление
LOCAL_SHARED_LIBRARIES:= liblog
в Android.mk может решить мою проблему. Это потому, что__android_log_print
это определено в libLogисточник
Для сборки с Android.bp следуйте приведенному ниже решению:
В этом - android_log_print определен в NDK, поэтому для этого уже есть библиотека. Используйте библиотеку " liblog " с тегом shared_libs , см. Приведенный ниже код:
источник