Android NDK包含的math.h给出了“使用未声明的标识符”错误

时间:2018-03-09 09:21:57

标签: android-ndk visual-studio-2017 clang

我的Visual Studio 2017社区版中有一个包含两个项目类型.androidproj(Android)和.vcxproj(C ++)的解决方案。我使用android-ndk-r13b作为C ++部分。

自从Visual Studio 2017 Community Edition版本15.5.7更新到15.6.1release notes)后,我遇到以下阻止错误:

error : use of undeclared identifier 'acosl'

查看构建输出中的表示行:

In file included from C:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r13b\sources\android\support\include\math.h:31:
C:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r13b\sources\cxx-stl\llvm-libc++\include\math.h(661,91): error : use of undeclared identifier 'acosl'
inline _LIBCPP_INLINE_VISIBILITY long double acos(long double __lcpp_x) _NOEXCEPT {return acosl(__lcpp_x);}

acosl旁边,还找不到所有其他数学函数。

不幸的是,这些帖子在我的案例中没有帮助:

任何暗示我可以尝试的东西?

更新

minSdkVersion设置为15。在Visual Studio更新之前编译的解决方案没有错误。

1 个答案:

答案 0 :(得分:1)

使用15.6,他们似乎在MSBuild文件中引入了一个更改“C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ VC \ VCTargets \ Application Type \ Android \ 3.0 \ Default .props“包含一堆Visual Studio的Android构建过程的默认输入值(MSBuild属性)。

导致此问题的更改是UseOfStl的新默认值,现在为c++_static,而在之前的版本中为gnustl_static

如上所述,这只是一个默认值,因此您可以通过在受影响的vcxproj文件中明确设置正确的值c++_static来解决此问题。

最简单的方法是打开vcxproj的属性页面,在“常规”页面中将“使用STL”设置为“GNU STL静态库(gnustl_static)”,如屏幕截图所示。

enter image description here

请注意,此问题已在此处发布为错误:https://developercommunity.visualstudio.com/content/problem/211533/visual-studio-update-156-breaks-c-android-app-buil.html