使用<cmath>和android ndk时构建问题

cor*_*bin 8 c++ android cmath android-ndk

我有一个stlTest2.cpp像这样的简单文件:

#include <jni.h>

#include <cmath>


bool isnan (void);
Run Code Online (Sandbox Code Playgroud)

在我移植的一些代码中有一些更复杂的东西.我的问题是这个.为什么在NDK之外使用GCC构建时会有效,而不是使用NDK?它给出的错误是这样的:

jni/stlTest2.cpp:6: error: expected unqualified-id before 'sizeof'
jni/stlTest2.cpp:6: error: expected ')' before 'sizeof'
Run Code Online (Sandbox Code Playgroud)

其直接原因是math.h(包括via <cmath>)定义isnan为宏.为什么ndk之外的构建不包括#definefrom math.h,但这是?如果我在代码中注释掉包含,那么一切都很好,但这是不可接受的,因为这个问题重复了......很多.

cor*_*bin 2

在 $ndk\sources\cxx-stl\gnu-libstdc++\libs\armeabi\include\bits\c++config.h (将armeabi更改为适当的值)中更改:

/* #undef _GLIBCXX_USE_C99_MATH */
Run Code Online (Sandbox Code Playgroud)

#define _GLIBCXX_USE_C99_MATH 1
Run Code Online (Sandbox Code Playgroud)

然后再次清理并构建您的项目。