视觉studio到 2015 年, Android NDK libc + + 和 cmath 的问题

发布时间: 2017/3/15 22:35:24
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

当创建本机 Android NDK 项目与新视觉studio 2015年预览和改变到"LLVM libc + + 静态库 (c + + _static)",STL 只包括 <cmath> 在默认"main.cpp"文件和使用默认锵 3.4 编译导致以下问题︰

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Apps\android-ndk-r10\sources\cxx-stl\llvm-libc++\libcxx\include\cmath(652,8): error : no member named 'float_t' in the global namespace
1>  using ::float_t;
1>        ~~^
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\Apps\android-ndk-r10\sources\cxx-stl\llvm-libc++\libcxx\include\cmath(653,8): error : no member named 'double_t' in the global namespace
1>  using ::double_t;
1>        ~~^
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\Apps\android-ndk-r10\sources\cxx-stl\llvm-libc++\libcxx\include\cmath(680,85): error : use of undeclared identifier 'acosl'
1>  inline _LIBCPP_INLINE_VISIBILITY long double acos(long double __x) _NOEXCEPT {return acosl(__x);}

......和更多。

这永远不会导致问题,当使用 Eclipse,所以不知道我做错了或如果是默认项目问题吗?

编辑︰ 现在我已经修正了票向添加 Microsoft 连接︰

https://connect.microsoft.com/VisualStudio/feedback/details/1031464/compiling-ndk-project-when-including-cmath-causes-issues-with-clang-and-libc

解决方法 1:

为此原因在于 <math.h> 存在的 android 平台 19 和下边有包围这些 typedef

#if 0
#endif

块。对于这些平台,这些 extra 定义在

$(VS_NdkRoot)/sources/android/support/include

只在 Visual Studio 项目中包括此文件夹 settings 导致成功编译。

顺便说一句, <math.h> 文件为平台 21 在较新的 NDK-10 c 看起来固定 (所以你不需要包括支持文件夹),然而视觉studio 2015年预览安装版本 10。当用 10 c 替换已安装的版本 10,然后咱们到目标平台 21 项目资源管理器中的选项 (虽然官方不支持)。这很好,编译并虽然它的目标平台 21,应该可以解决这个问题之前。

这里是有关 Android bug 报告 (它是一个 Visual Studio 的问题,它应包括此文件夹中的默认项目)︰

https://code.google.com/p/android/issues/detail?id=79890&thanks=79890&ts=1416335194

编辑︰ 改变旧的 NDKRoot 宏与较新的 VS_NdkRoot 宏。

赞助商