Android NDK Android studio gradle undefined reference to __android_log_écrire
Je suis en train de déboguer un JNI fonction C par l'insertion de messages de log, mais je ne peux pas le faire fonctionner. Pour commencer, je suis juste essayer de modifier le bonjour-jni exemple qui vient avec Android Studio. C'est le code modifié:
#include <string.h>
#include <jni.h>
#include <android/log.h>
jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
#if defined(__arm__)
#if defined(__ARM_ARCH_7A__)
#if defined(__ARM_NEON__)
#if defined(__ARM_PCS_VFP)
#define ABI "armeabi-v7a/NEON (hard-float)"
#else
#define ABI "armeabi-v7a/NEON"
#endif
#else
#if defined(__ARM_PCS_VFP)
#define ABI "armeabi-v7a (hard-float)"
#else
#define ABI "armeabi-v7a"
#endif
#endif
#else
#define ABI "armeabi"
#endif
#elif defined(__i386__)
#define ABI "x86"
#elif defined(__x86_64__)
#define ABI "x86_64"
#elif defined(__mips64) /* mips64el-* toolchain defines __mips__ too */
#define ABI "mips64"
#elif defined(__mips__)
#define ABI "mips"
#elif defined(__aarch64__)
#define ABI "arm64-v8a"
#else
#define ABI "unknown"
#endif
__android_log_write(ANDROID_LOG_ERROR, "TEST_TAG", "Error here");
return (*env)->NewStringUTF(env, "Hello from JNI ! Compiled with ABI " ABI ".");
}
Et c'est mon Android.mk fichier:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
LOCAL_LDFLAGS := -llog
include $(BUILD_SHARED_LIBRARY)
Lorsque j'utilise le ndk-build
script de la libhello-jni.si les fichiers se construit pas de problème. Quand j'essaie de compiler le projet dans Android Studio j'ai le gradle message d'erreur
Information:Gradle tasks [:app:assembleDebug]
:app:preBuild
:app:compileDebugNdk
C:\Android\projects\hello-jni\app\build\intermediates\ndk\debug\obj/local/arm64-v8a/objs/hello-jni/C_\Android\projects\hello-jni\app\src\main\jni\hello-jni.o: In function `Java_com_example_hellojni_HelloJni_stringFromJNI':
hello-jni.c:(.text.Java_com_example_hellojni_HelloJni_stringFromJNI+0x24): undefined reference to `__android_log_write'
Error:error: ld returned 1 exit status
make.exe: *** [C:\Android\projects\hello-jni\app\build\intermediates\ndk\debug\obj/local/arm64-v8a/libhello-jni.so] Error 1
Error:Execution failed for task ':app:compileDebugNdk'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
C:\Android\android-ndk-r10c\ndk-build.cmd NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=C:\Android\projects\hello-jni\app\build\intermediates\ndk\debug\Android.mk APP_PLATFORM=android-19 NDK_OUT=C:\Android\projects\hello-jni\app\build\intermediates\ndk\debug\obj NDK_LIBS_OUT=C:\Android\projects\hello-jni\app\build\intermediates\ndk\debug\lib APP_ABI=all
Error Code:
2
Output:
C:\Android\projects\hello-jni\app\build\intermediates\ndk\debug\obj/local/arm64-v8a/objs/hello-jni/C_\Android\projects\hello-jni\app\src\main\jni\hello-jni.o: In function `Java_com_example_hellojni_HelloJni_stringFromJNI':
hello-jni.c:(.text.Java_com_example_hellojni_HelloJni_stringFromJNI+0x24): undefined reference to `__android_log_write'
collect2.exe: error: ld returned 1 exit status
make.exe: *** [C:\Android\projects\hello-jni\app\build\intermediates\ndk\debug\obj/local/arm64-v8a/libhello-jni.so] Error 1
Information:BUILD FAILED
Information:Total time: 3.297 secs
Information:2 errors
Information:0 warnings
Information:See complete output in console
J'ai essayé les suggestions données dans cette question, mais j'obtiens toujours la même erreur: Qu'est-ce que le Journal de l'API à l'appel de l'un de Android JNI programme?
Ce que je fais mal?
Je suis en utilisant Android Studio 0.8.9 et NDK r10c.
-llog
indicateur n'est pas de passer à travers. Quel est votre GCC de commande de liaison?Où pourrais-je trouver ça?
Pourquoi êtes-vous à l'aide de la fonction privée en revanche si la BORDURE* définitions dans le journal.h?
Je ne savais pas il y avait ALOG* définitions dans le journal.h. Je pensais que tu devais définir vous-même.
OriginalL'auteur ChrisA | 2014-10-26
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une réponse après un peu plus de recherche.
Si j'ai construit la .donc les fichiers à l'aide de la
ndk-build
script sur la ligne de commande et ajouterdans mon construire.gradle fichier afin de gradle ne pas essayer de construire la .fichiers tout cela fonctionne. Ressemble à un problème avec Android Studio-Gradle-NDK intégration?
J'ai trouvé la réponse ici https://stackoverflow.com/a/21111458/4182796
OriginalL'auteur ChrisA
Laid solution consiste à supprimer l'appel de fonction et de reconstruire les sources, il suffit d'ajouter cette après comprend :
OriginalL'auteur RzR