Android Can';我不能让CUDA学习探戈,或者:我如何为另一个手臂EABI修改代码?

Android Can';我不能让CUDA学习探戈,或者:我如何为另一个手臂EABI修改代码?,android,cuda,android-ndk,google-project-tango,abi,Android,Cuda,Android Ndk,Google Project Tango,Abi,首先,很抱歉这个标题可能有误导性,但我想不出更好的简短描述了 在我的学士学位论文中,我写了一个Tango应用程序,出于性能原因需要CUDA。不幸的是,我不是一个经验丰富的Android开发人员,所以90%关于CUDA、JNI或Tango的教程和指南都不够基础 据我所知,NVCC总是为armeabi-v7a-hard ABI生成代码。因此,从我理解的,我的“正常”C++代码也必须为这个ABI编译。虽然我不能调试我的C++代码,但我可以忍受它,而且经过许多小时的阅读和反复试验后,它也能工作。p> 然

首先,很抱歉这个标题可能有误导性,但我想不出更好的简短描述了

在我的学士学位论文中,我写了一个Tango应用程序,出于性能原因需要CUDA。不幸的是,我不是一个经验丰富的Android开发人员,所以90%关于CUDA、JNI或Tango的教程和指南都不够基础

据我所知,NVCC总是为armeabi-v7a-hard ABI生成代码。因此,从我理解的,我的“正常”C++代码也必须为这个ABI编译。虽然我不能调试我的C++代码,但我可以忍受它,而且经过许多小时的阅读和反复试验后,它也能工作。p> 然而,今天我遇到了这个问题:。libtango_client_api.so不是为armeabi-v7a-hard编译的。我不明白为什么我的链接过程没有失败,但事实就是这样

在我看来,我现在有几个选择:

  • 为armeabi-v7a编译整个项目。我相信这将是最好的解决方案,但需要NVCC提供匹配的代码。似乎有可能将
    -mfloat abi=hard
    -开关传递到g++上,但我找不到任何关于它的作用和原因以及是否有效的文档

  • 在提到的StackOverflow文章中,他们提到了“破坏”tango_客户端api.h。我发现了两个提示:和,因此我尝试将标头中的每个函数声明从(例如)

    前者崩溃时出现
    Error:Error:'pcs'属性被忽略[-Werror=attributes]
    ,后者根本不编译(
    Error:Error:'\uu hardfp'没有命名类型
    )。所以,要么我做错了什么,要么这是一个被g++忽略的属性,只有armcc才尊重它

  • 重新编译libtango_client_api.so。不过,我在谷歌的网站上找不到任何源代码

  • 不要使用
    TangoService\u getPoseAtTime
    -函数。这不是什么大问题,但我担心我可能会发现额外的坏函数或出现奇怪的行为,因为它显然只是意外工作

  • 为CUDA使用Java包装器。无法想象这是个好主意,尽管


  • 非常感谢您的帮助

    为什么你认为nvcc只生成armeabi-v7a-硬代码?您可以将CUDA代码编译为常规的armeabi-v7a二进制文件


    据我所知,nvcc依赖于编译代码所使用的工具链(使用
    -ccbin
    参数),并且armeabi-v7a受标志
    -march=armv7-a-mfloat abi=softfp

    支持,为什么您认为nvcc只生成armeabi-v7a-hard代码?您可以将CUDA代码编译为常规的armeabi-v7a二进制文件


    据我所知,nvcc依赖于编译代码所使用的工具链(使用
    -ccbin
    参数),armeabi-v7a由标志
    -march=armv7-a-mfloat abi=softfp

    支持,非常感谢。我有这样的印象,因为在整个谷歌中,我没有发现任何东西表明这是一个好主意。也许我只是愚蠢。此外,我认为libcucart_static.a永远无法与硬浮动和软浮动ABI相关联,但这显然是我的误解。如果nvidia将手册中的Andoid部分从一行半扩展到一个简短的教程,那将是一件好事。。。。不管怎样,再次感谢你,你帮了我很多痛苦,应该早点问;)好的,非常感谢。我有这样的印象,因为在整个谷歌中,我没有发现任何东西表明这是一个好主意。也许我只是愚蠢。此外,我认为libcucart_static.a永远无法与硬浮动和软浮动ABI相关联,但这显然是我的误解。如果nvidia将手册中的Andoid部分从一行半扩展到一个简短的教程,那将是一件好事。。。。不管怎样,再次感谢你,你帮了我很多痛苦,应该早点问;)
    void TangoConfig_free(TangoConfig config)
    
    void TangoConfig_free(TangoConfig config) __attribute__((pcs("aapcs-vpf"))) ;
    
    __hardfp void TangoConfig_free(TangoConfig config);