Обнаружить stdint.h и C ++ 11 на Android NDK

Я нашел где-то, что я мог обнаружить C ++ 11, используя следующую строку:

#if __cplusplus <= 199711L

Я использую это для условно определенных типов фиксированной ширины, таких как int32_t или uchar16_t и т. Д.

Проблема в том, что при использовании Android NDK, __cplusplus определяется как 1,
Есть ли более портативный способ обнаружения C ++ 11 и наличия stdint.h, чтобы избежать переопределений?

Спасибо.

1

Решение

Для меня это всегда работает:

$ 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, и он работает в обоих из них, так что определенно что-то не так с вашей настройкой. Я мог бы сказать больше, если бы вы предоставили минимальный проект, где такая проблема существует.

1

Другие решения


По вопросам рекламы [email protected]