2017-09-07 3 views
0

ich einen Compiler-Fehler bekommen:Google Project Tango NDK undefined reference auf Funktionen

undefined reference to 'TangoService_getConfig' (MoreTeapotsNativeActivity.cpp) 

ld returned 1 exit status (collect2.exe) 

ich mit dem Tango sdk TangoSDK_Ikariotikos_C.zip in Visual Studio 2015 mit VisualGDB arbeite. Ich habe auch den Fehler in Android Studio repliziert, so dass es nicht IDE-spezifisch ist.

Ich habe mit einem NDK-Beispielprojekt begonnen, um zu testen, ob eine native Aktivität korrekt implementiert wird und die Komplexität reduziert wird, während die Fehlerbehebung durchgeführt wird. Ich habe VisualGDB MoreTeaPotsNativeActivity verwendet, aber alle werden es tun. Die App kompiliert und läuft auf unserem ASUS Zenfone AR. Sobald ich tango_client_api.h und fügen Sie den folgenden Code enthalten, erhalte ich die Compiler-Fehler:

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); 

Die Tango-Header-Datei hat eine extern „C“ Wrapper für die C-Funktionen und die .o zeigt demangled ihnen so kann ich Ich verstehe nicht, warum es scheitert.
Wenn ich auf Kommentar ...

//tango_config = TangoService_getConfig(TANGO_CONFIG_DEFAULT); 

... es kompiliert und die Aufzählungen zeigen, wie die Einheimischen in der Debug-so ist es ein Problem mit Funktionen zu sein scheint: see image of locals here

kann ich etwas fehlen offensichtlich, weil Android ziemlich neu für mich ist. Vielleicht kann jemand die tangoSDK-Bibliothek mit dem gleichen Codeblock testen und das Problem erkennen. Es ist frustrierend, dass ich nicht einmal eine Bibliothek verlinken kann. Ich vermisse etwas Einfaches, aber für mich ist es nicht offensichtlich.

Jede Hilfe wird sehr geschätzt.

Antwort

0

Ich kontaktierte Sysprogs Unterstützung, die mir einen Link gab: PREBUILT_SHARED_LIBRARY syntax

ich nicht die Bibliothek erkannt hatte, wurde nicht einmal kopiert werden, obwohl intellisense den Header liest. Ich brauchte eine Referenz in der Make-Datei (android.mk) um die Bibliothek zu kopieren (I kopiert Tango umfasst und lib Ordner zum Projekt jni Ordnern):

include $(CLEAR_VARS) 

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

include $(PREBUILT_SHARED_LIBRARY) 

Ich tat das gleiche mit einem zusätzlichen Block für die Support-Bibliothek:

include $(CLEAR_VARS) 

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

include $(PREBUILT_SHARED_LIBRARY) 

das Hauptmodul muss nur das:

LOCAL_SHARED_LIBRARIES := tango_client_api 

die ganze Datei sieht wie folgt aus:

Ich habe das nicht sofort funktionieren lassen, wenn ich die NDK-Beispiele befolgte, aber Sysprogs gab mir Feedback zu meinem Fehler, den ich hinzufügen werde.

Ich habe versucht, die folgenden:

LOCAL_MODULE_FILENAME := tango_client_api 

ich die lib links ab und .so als Konvention zu sein schien. Das .so war nicht notwendig, aber das Entfernen von lib änderte den Dateinamen, der einen Verbindungsfehler verursachte. Das sagte, diese Linie war in erster Linie unnötig, um es zu entfernen. Dann hat es den diesbezüglichen Fehler behoben.Ich habe noch zu sehen, ob die Bibliothek zur Laufzeit funktioniert, weil ich jetzt diesen Fehler:

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 

Aber das scheint ein Problem mit Android 7.0 Plattform 24 und höher, wo

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

von/beziehen Android/Android-SDK/Docs/Über/Versionen/Nougat/Android-7.0-Änderungen.html