Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Referencia indefinida a `__android_log_print '

¿Qué hay de malo en mi archivo?

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' 

  • ¿Cómo registrar una cuenta de desarrollador de Android para una empresa?
  • Debug Android primavera marco: imprimir las solicitudes enviadas
  • Cómo obtener los errores de la consola del navegador en Android-Phonegap-app, posiblemente en Eclipse?
  • Deshabilitar registros de Volley en la aplicación de Android
  • Adb logcat -f log.txt error: no se pudo abrir el archivo de salida: Sistema de archivos de sólo lectura
  • Android 4.0.3 y actividad final
  • Xamarin Android - Desactivar registros mono
  • ¿Cómo obtener los mensajes "printf" escritos en la aplicación NDK?
  • 10 Solutions collect form web for “Referencia indefinida a `__android_log_print '”

    Prueba lo siguiente en tu archivo de Android.mk :

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

    Necesitas agregar

     LOCAL_LDLIBS := -llog 

    A Android.mk

    Si utiliza Android Studio y gradle, ignora Android.mk. Añada esto al archivo build.gradle:

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

    Si actualizas a Android Studio 2.1, las respuestas anteriores no funcionan, necesitas usar ldLibs.add () para cargar la lib como se muestra a continuación:

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

    Para Android Studio 2.2 y tools.build:gradle:2.2.0 con CMake agregar o editar fila en CMakeLists.txt:

     target_link_libraries(<your_library_name> android log) 

    Eso es conectar la biblioteca de registro a la suya.

    Podemos vincular una biblioteca compartida en Android de 3 formas. En menos de 3 casos, las líneas mencionadas deberían agregarse en Android.mk

    Así que aquí están las tres formas.

     1. LOCAL_LDLIBS way LOCAL_LDLIBS := -llog 

    Por alguna razón si 1 no funciona (no funcionó para mí), Usted puede intentar abajo de 2 maneras

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

    Por supuesto, también debe incluir #include <android/log.h> en su archivo C / H.

    En lugar de

    Si utiliza la nueva integración NDK de Gradle en Android Studio 1.3, debe agregar ldLibs = ["android", "log"] a sus opciones de android.ndk – Stephen Kaiser Sep 24 at 4:20

    ldLibs.addAll(["android", "log"]) para el complemento experimental

    Sí, necesitas agregar: LOCAL_LDLIBS := -llog como las otras respuestas / comentarios han especificado, sin embargo, la pregunta original no especificó si usaba la biblioteca jni como: LOCAL_JNI_SHARED_LIBRARIES o como LOCAL_REQUIRED_MODULES .

    Puedo decir bastante seguro que lo ha utilizado como: LOCAL_REQUIRED_MODULES debido a la LOCAL_EXPORT_LDLIBS := -llog en la pregunta … a menos que se haya añadido después de una edición.

    Si utiliza LOCAL_REQUIRED_MODULES la biblioteca compartida se instala en / system / lib en lugar de en el apk, ya que es un módulo requerido. Por lo tanto, necesitará agregar LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog lugar de simplemente LOCAL_LDLIBS := -llog para que cuando el sistema de compilación esté construyendo y enlazando la biblioteca compartida jni, tendrá el -llog Definiciones en el lugar correcto, disponibles para ser construidas bajo $OUT/root/system/lib . De lo contrario, seguirá obteniendo la misma respuesta, aunque sólo agregue LOCAL_LDLIBS := -llog .

    Por lo tanto, los que comentaron que el -L no es necesario, y la otra respuesta era correcta, que eran en realidad incorrecta en esta situación.

    Añadir

     LOCAL_SHARED_LIBRARIES:= \ libbinder \ liblog \ 

    A Android.mk

    Esto me ayudó:

    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) 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.