Google Project Tango NDK关于功能的未定义参考



我得到了一个编译错误:

undefined reference to 'TangoService_getConfig' (MoreTeapotsNativeActivity.cpp)
ld returned 1 exit status (collect2.exe)

我正在使用VisualGDB在Visual Studio 2015中使用Tango SDK Tangosdk_ikariotikos_c.zip。我还复制了Android Studio中的错误,因此不是IDE的特定于IDE。

我已经从NDK样本项目开始,以测试本机活动正确部署并在故障排除时降低复杂性。我已经使用了VisualGDB Moreteapotsnativeactivity,但任何人都可以做到。该应用程序编译并在我们的华硕Zenfone AR上运行。一旦包含Tango_client_api.h并添加以下代码,我就会获得编译错误:

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

Tango标头文件具有C函数的外部" C"包装器,并且.O显示了它们被删除,所以我看不出为什么失败。
如果我发表评论...

//tango_config = TangoService_getConfig(TANGO_CONFIG_DEFAULT);

...它编译,枚举在调试中显示为当地人,因此函数似乎是一个问题:请参阅此处的当地人的图像

我可能缺少明显的明显,因为Android对我来说是相当新的。也许有人可以使用相同的代码块测试Tangosdk库并发现问题。令人沮丧的是,我什至无法链接库。我可能缺少一些简单的东西,但对我来说并不明显。

任何帮助将不胜感激。

我联系了Sysprogs支持,后者给了我一个链接:prebuilt_shared_library语法

我没有意识到,即使Intellisense正在阅读标题,也没有复制图书馆。我需要在制作文件(android.mk)中包含一个参考文献以将库复制(我复制了Tango Incluction和LIB文件夹和lib文件夹):

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

我在支持库的附加块中做了同样的事情:

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

主模块只需要以下方式:

LOCAL_SHARED_LIBRARIES := tango_client_api

整个文件看起来像这样:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE          := tango_client_api
LOCAL_SRC_FILES := ../jni/lib/$(TARGET_ARCH_ABI)/libtango_client_api.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE          := tango_support_api
LOCAL_SRC_FILES := ../jni/lib/$(TARGET_ARCH_ABI)/libtango_support_api.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE    := MoreTeapotsNativeActivity
#VisualGDBAndroid: AutoUpdateSourcesInNextLine
LOCAL_SRC_FILES := gdbserver_launcher.c MoreTeapotsNativeActivity.cpp MoreTeapotsRenderer.cpp
LOCAL_C_INCLUDES := jni/include
LOCAL_LDLIBS    := -llog -landroid -lEGL -lGLESv2
LOCAL_STATIC_LIBRARIES := cpufeatures android_native_app_glue ndk_helper
LOCAL_SHARED_LIBRARIES := tango_client_api

include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/ndk_helper)
$(call import-module,android/native_app_glue)
$(call import-module,android/cpufeatures)

遵循NDK示例时,我没有立即工作,但是Sysprogs给了我有关我将包括的错误的反馈。

我试图包括:

LOCAL_MODULE_FILENAME := tango_client_api 

我离开了lib,因此似乎是惯例。.So不是必需的,但是取消Lib是更改导致链接错误的文件名。也就是说,这条线是不必要的,我将其删除。然后它删除了与此有关的错误。我还没有看到库在运行时是否有效,因为我现在会收到此错误:

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

,但这似乎与Android 7.0平台24及更高的问题有关

该系统可防止应用程序动态链接到非NDK库

来自/android/android-sdk/docs/about/versions/nougat/android-7.0-changes.html

相关内容

  • 没有找到相关文章

最新更新