Android Can';我不能让CUDA学习探戈,或者:我如何为另一个手臂EABI修改代码?
首先,很抱歉这个标题可能有误导性,但我想不出更好的简短描述了 在我的学士学位论文中,我写了一个Tango应用程序,出于性能原因需要CUDA。不幸的是,我不是一个经验丰富的Android开发人员,所以90%关于CUDA、JNI或Tango的教程和指南都不够基础 据我所知,NVCC总是为armeabi-v7a-hard ABI生成代码。因此,从我理解的,我的“正常”C++代码也必须为这个ABI编译。虽然我不能调试我的C++代码,但我可以忍受它,而且经过许多小时的阅读和反复试验后,它也能工作。p> 然而,今天我遇到了这个问题:。libtango_client_api.so不是为armeabi-v7a-hard编译的。我不明白为什么我的链接过程没有失败,但事实就是这样 在我看来,我现在有几个选择: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> 然
-mfloat abi=hard
-开关传递到g++上,但我找不到任何关于它的作用和原因以及是否有效的文档Error:Error:'pcs'属性被忽略[-Werror=attributes]
,后者根本不编译(Error:Error:'\uu hardfp'没有命名类型
)。所以,要么我做错了什么,要么这是一个被g++忽略的属性,只有armcc才尊重它TangoService\u getPoseAtTime
-函数。这不是什么大问题,但我担心我可能会发现额外的坏函数或出现奇怪的行为,因为它显然只是意外工作非常感谢您的帮助 为什么你认为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);