2012-10-23 4 views
1

de référence non définie à `get_int() »lien Android NDK à la bibliothèque statique

Je suis en train de construire la bibliothèque partagée dans Android. Cette bibliothèque utilise des fonctions de la bibliothèque statique prédéfinie "libATest.a" J'ai essayé toutes les méthodes que je peux utiliser. Toujours eu l'erreur "référence non définie à` get_int() '", mais je l'ai défini dans libAtest.a. Appeler à l'aide! applications NDK r8

enter image description here

Android.mk:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := ATest 
LOCAL_SRC_FILES := libATest.a 
include $(PREBUILT_STATIC_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := capi 
LOCAL_SRC_FILES := capi.cpp 

LOCAL_STATIC_LIBRARIES := ATest 
LOCAL_LDLIBS := -llog 
#LOCAL_ALLOW_UNDEFINED_SYMBOLS := true 
include $(BUILD_SHARED_LIBRARY) 

atest.h:

Application.mk:

APP_MODULES :=capi 

capi.cpp:

#include <time.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <jni.h> 
#include <string.h> 
#include <android/log.h> 

#include "atest.h" 

#ifdef __cplusplus 
extern "C" { 
#endif 

jstring Java_com_wzh_test_AndriodJNITestActivity_ttstest(JNIEnv* env, jobject thiz){ 
    get_int(); 
    return env->NewStringUTF("I'm from C!"); 
} 


#ifdef __cplusplus 
} 
#endif 

libATest.a:

#include "atest.h" 
int get_int(){ 
    return 55; 
} 

Répondre

0

Vous devez envelopper get_int dans un bloc trop extern "C", ou il sera traité comme ayant des liaisons C++.

Vous pouvez dire qu'il est traité comme une fonction C++ car l'erreur de l'éditeur de liens mentionne la signature de la fonction (get_int() par opposition à get_int).

EDIT: Votre deuxième problème est que vous avez appelé le fichier source de votre bibliothèque libATest.a! Les bibliothèques statiques doivent être compilées. Au lieu de cela, vous devriez avoir un fichier atest.c contenant le code source (la fonction get_int), et utiliser LOCAL_SRC_FILES := atest.c lors de la construction de la bibliothèque ATest. Vous devrez également supprimer libATest.a pour éviter tout problème de dépendance.

+0

Après avoir ajouté le "C" externe au fichier .h et .a, obtenant l'erreur "référence non définie à' get_int '". Aide de GOD! – Qiengo

+0

Juste remarqué le deuxième problème ... édité la réponse – nneonneo

+0

Malheureusement, j'ai hava à utiliser libATest.a, qui est fourni par une autre société et je ne peux pas obtenir le code source.Maintenant, je fais un test, alors je viens de construire une bibliothèque simplement statique nommée "libATest.a". – Qiengo

Questions connexes