2017-09-07 8 views
0

Je reçois une erreur de compilation:référence non définie Google Project Tango NDK sur les fonctions

undefined reference to 'TangoService_getConfig' (MoreTeapotsNativeActivity.cpp) 

ld returned 1 exit status (collect2.exe) 

Je travaille avec le sdk tango TangoSDK_Ikariotikos_C.zip dans Visual Studio 2015 à l'aide VisualGDB. J'ai également répliqué l'erreur dans Android Studio afin qu'il ne soit pas spécifique à l'IDE.

J'ai commencé avec un projet exemple NDK pour tester une activité native déployée correctement et réduire la complexité tout en dépannant. J'ai utilisé VisualGDB MoreTeaPotsNativeActivity mais tout le sera. L'application compile et fonctionne sur notre ASUS Zenfone AR. Une fois que j'inclus tango_client_api.h et ajoutez le code suivant, je reçois l'erreur de compilation:

TangoCoordinateFramePair* Tango_FramePair; 
Tango_FramePair = new TangoCoordinateFramePair(); 
Tango_FramePair->base = TANGO_COORDINATE_FRAME_START_OF_SERVICE; 
Tango_FramePair->target = TANGO_COORDINATE_FRAME_DEVICE; 
TangoErrorType retval; 
// Connect to tango service. 
TangoConfig tango_config; 
tango_config = TangoService_getConfig(TANGO_CONFIG_DEFAULT); 

Le fichier d'en-tête Tango a une extern wrapper « C » pour les fonctions C et les .o leur montre demangled si je peux Ne vois pas pourquoi ça ne marche pas.
Si je en commentaire ...

//tango_config = TangoService_getConfig(TANGO_CONFIG_DEFAULT); 

... il compile et les énumérations montrent que la population locale dans le débogage il semble être un problème avec les fonctions: see image of locals here

je manquer quelque chose clairement évident parce que Android est assez nouveau pour moi. Peut-être que quelqu'un peut tester la bibliothèque tangoSDK avec le même bloc de code et repérer le problème. C'est frustrant que je ne puisse même pas lier une bibliothèque. Il me manque peut-être quelque chose de simple mais pour moi ce n'est pas évident.

Toute aide sera grandement appréciée.

Répondre

0

Je contacté Sysprogs soutien qui m'a donné un lien: PREBUILT_SHARED_LIBRARY syntax

Je ne l'avais pas réalisé la bibliothèque n'a pas été copié même si IntelliSense était en train de lire l'en-tête. Je avais besoin d'inclure une référence dans le fichier makefile (de android.mk) pour copier la bibliothèque (je copiais Tango inclut et les dossiers lib au projet dossier JNI):

include $(CLEAR_VARS) 

LOCAL_MODULE   := tango_client_api 
LOCAL_SRC_FILES := ../jni/lib/$(TARGET_ARCH_ABI)/libtango_client_api.so 

include $(PREBUILT_SHARED_LIBRARY) 

J'ai fait la même chose avec un bloc supplémentaire pour la bibliothèque de soutien:

include $(CLEAR_VARS) 

LOCAL_MODULE   := tango_support_api 
LOCAL_SRC_FILES := ../jni/lib/$(TARGET_ARCH_ABI)/libtango_support_api.so 

include $(PREBUILT_SHARED_LIBRARY) 

le module principal a juste besoin ceci:

LOCAL_SHARED_LIBRARIES := tango_client_api 

le fichier entier ressemble à ceci:

Je n'ai pas compris que ça marche tout de suite en suivant les exemples NDK mais Sysprogs m'a donné des retours sur mon erreur que je vais inclure.

J'ai essayé d'inclure:

LOCAL_MODULE_FILENAME := tango_client_api 

je suis parti de la lib et .donc comme cela semble être convention. Le .so n'était pas nécessaire mais en prenant lib off changeait le nom de fichier qui a provoqué une erreur de lien. Cela dit, cette ligne n'était pas nécessaire en premier lieu pour que je l'enlève. Ensuite, il a supprimé l'erreur relative à cela.Je dois encore voir si la bibliothèque fonctionne à l'exécution parce que je reçois maintenant cette erreur:

java.lang.UnsatisfiedLinkError: Unable to load native library "/data/app/com.sample.moreteapots-2/lib/arm64/libMoreTeapotsNativeActivity.so": dlopen failed: library "libbinder.so" not found 

Mais cela semble se rapporter à un problème avec Android 7.0 plate-forme 24 et plus où

the system prevents apps from dynamically linking against non-NDK libraries

de/Android/android-sdk/docs/about/versions/nougat/android-7.0-changes.html