2015-06-08 4 views
1

я нашел где-то, что я мог бы обнаружить C++ 11, используя следующую строку:Обнаружение stdint.h и C++ 11 на андроид НДК

#if __cplusplus <= 199711L 

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

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

спасибо.

+0

Вам не нужно обнаруживать 'stdint.h'. Он всегда должен быть доступен, потому что его IEEE Std 1003.1/Posix. Единственный заголовок, о котором я помню, столкнулся с проблемой ''. Мне было нужно что-то, а не '', поэтому мне нужно было условно включить' 'на основе' #ifdef __ANDROID__'. – jww

+0

Вот короткий путь к его решению

http://stackoverflow.com/a/36324758/4242341

Aqua

ответ

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

+0

Спасибо за помощь. Я решил создать настраиваемое определение, чтобы указать, хочу ли я, чтобы все было определено или нет. – Virus721

 Смежные вопросы

  • Нет связанных вопросов^_^