Intereting Posts
Удаленные файлы Android Gradle, скопированные в APK META-INF / license.txt ConstraintLayout не корректно отображает внешний режим Android – общие переходы элементов с завершением активности вызова () Android-карты: как долго кликнуть карту? Почему XML-файл макета xml не распознает контентную поддержку ctrl + space? Удаленная веб-отладка Google Chrome для Android Как реализовать многооконный макет (например, браузер по умолчанию) (редактор с несколькими открытыми файлами) Возможно ли выпустить обновленное приложение, подписав его с другим сертификатом, чем тот, который первоначально использовался ListView игнорирует wrap_content Отключите GoogleMaps v2 View, чтобы он игнорировал все события касания Внешние проекты библиотеки Android с Gradle Получение названия улицы из объекта Address / Location в Android Android GridView не будет обнаружен Вкладки вкладки в Android 4 с поддержкой библиотеки (ActionBarSherlock) Тесты завершаются после обновления Espresso 2 (не удалось: сбой инструментария из-за «java.lang.IllegalAccessError»)

Неопределенная ссылка на `__android_log_print '

Что не так с моим файлом 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-сборки

 foo.c:9: undefined reference to `__android_log_print' 

Solutions Collecting From Web of "Неопределенная ссылка на `__android_log_print '"

Попробуйте следующее в файле Android.mk :

 LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 

Вы должны добавить

 LOCAL_LDLIBS := -llog 

На Android.mk

Если вы используете Android Studio и gradle, он игнорирует Android.mk. Добавьте это в свой файл build.gradle:

 android { defaultConfig { ndk { moduleName "your_module_name" ldLibs "log" } } } 

Если вы перейдете на Android Studio 2.1, ответы выше не работают, для загрузки lib необходимо использовать ldLibs.add ():

 android.ndk { moduleName = "[the_module_name]" ldLibs.addAll(['android', 'log']) } 

Для Android Studio 2.2 и tools.build:gradle:2.2.0, используя CMake add или edit row в CMakeLists.txt:

 target_link_libraries(<your_library_name> android log) 

Это соединение библиотеки журналов с вашими.

Мы можем связать общую библиотеку в Android тремя способами. В ниже 3 случаях упомянутые строки должны быть добавлены в Android.mk

Итак, вот три способа.

 1. LOCAL_LDLIBS way LOCAL_LDLIBS := -llog 

По какой-то причине, если 1 не работает (это не сработало для меня), вы можете попробовать менее двух способов

 2. LOCAL_LDFLAGS way LOCAL_LDFLAGS := -llog 3. LOCAL_SHARED_LIBRARIES way LOCAL_SHARED_LIBRARIES += liblog 

Конечно, вам также необходимо включить #include <android/log.h> в ваш файл C / H.

Вместо

Если вы используете новую интеграцию Gradle NDK в Android Studio 1.3, вам нужно добавить ldLibs = ["android", "log"] к вашим параметрам android.ndk – Stephen Kaiser Sep 24 at 4:20

Используйте ldLibs.addAll(["android", "log"]) для экспериментального плагина

Да, вам нужно добавить: LOCAL_LDLIBS := -llog как LOCAL_LDLIBS := -llog другие ответы / комментарии, однако исходный вопрос не указал, использует ли он библиотеку LOCAL_JNI_SHARED_LIBRARIES как: 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 не нужен, и другой ответ был прав, на самом деле они были неверными в этой ситуации.

Добавить

 LOCAL_SHARED_LIBRARIES:= \ libbinder \ liblog \ 

На Android.mk

Это помогло мне:

Android.mk

  LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := nativeDemo LOCAL_SRC_FILES := main.cpp LOCAL_LDLIBS += -llog include $(BUILD_SHARED_LIBRARY)