在android NDK上检测stint .h和c++ 11

Detect stdint.h and C++11 on android NDK

本文关键字:c++ stint 检测 android NDK      更新时间:2023-10-16

我发现我可以使用以下行检测c++ 11:

#if __cplusplus <= 199711L

我用它来有条件地定义固定宽度类型,如int32_t或uchar16_t等…

问题是,当使用android NDK时,__cplusplus被定义为1。是否有一种更可移植的方法来检测c++ 11和stint .h的存在以避免重定义?

谢谢。

对我来说,它总是有效的:

$ CXX=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g++
$ $CXX -x c++ -E -dM /dev/null | grep __cplusplus
#define __cplusplus 199711L
$ $CXX -x c++ -std=c++11 -E -dM /dev/null | grep __cplusplus
#define __cplusplus 201103L

LLVM工具链也一样:

$ CXX="$NDK/toolchains/llvm-3.5/prebuilt/darwin-x86_64/bin/clang++ -target armv7-none-linux-androideabi"
$ $CXX -x c++ -E -dM /dev/null | grep __cplusplus
#define __cplusplus 199711L
$ $CXX -x c++ -std=c++11 -E -dM /dev/null | grep __cplusplus
#define __cplusplus 201103L

我已经用NDK r10d和r10e尝试过了,它在两者中都有效,所以你的设置肯定有问题。

如果您能提供存在此类问题的最小项目,我可以说得更多。