After C++11, various cmath
functions previously in the global namespace are moved to the std
namespace, when including the
h
If functions are really missing, you have to write them yourself (or copy them from some other implementation).
In the Android NDK, some functions seem to be there, but just outside of namespace std
. I have worked around the same issue for the round
function by adding a function round
to namespace std
, which just falls back on the round
function from the global scope.
namespace std
{
inline int round(float x)
{
return ::round(x);
}
}
If you want to use this in a portable way, you would have to protect this with preprocessor macros.
This seems to be a known issue with C++11 support on android. There is a known issue that indicates that a lot of the routines are missing:
When compiling c++ code with
-std=c++11
and usinggnustl_shared
, many C99 math functions are not provided by the<cmath>
header as they should.
You're probably better off assuming that only a limited subset of the c++ library is available for android - this seems to be indicated in the CPLUSPLUS-SUPPORT.html
file in the docs/
for the ndk.
Mind you when I have:
APP_STL := c++_static
in my Application.mk
and
LOCAL_CPPFLAGS := -std=c++11
in my Android.mk
, then files making use of std::cbrt
and std::round
compile cleanly; but it is against the static LLVM libc++, rather than against the gnu standard library.