2017-02-06 26 views
2

Я компилирую код библиотеки C++ в Android Studio 2.2. Я следую новому руководству, где я добавляю все файлы в свой проект и компилирую его с помощью CMake (и CMakeLists.txt), например this. Я хочу использовать функции C++ 14, и такие вещи, как атомный, stoi и т. Д., Но здание не работает с ошибками.Set ANDROID_STL в CMakeLists

error: no type named 'condition_variable' in namespace 'std' 
error: no member named 'stoi' in namespace 'std' 

Это то, что мой CMakeLists выглядит (остальные строки устанавливают исходные файлы и другие вещи):

find_library(GLES GLESv2) 
include_directories(${COMMON_PATH} /usr/local/include) 
set(ANDROID_STL "c++_shared") 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -latomic") 

add_library(native-lib SHARED ${COMMON_SRC}) 
target_link_libraries(native-lib ${GLES}) 

Я нашел эту статью на андроид странице (here), но я не знаю, как и если я могу это сделать при использовании CMakeLists, а не ndk-build. Я вижу другой вопрос, который решает его, используя статическую среду C++ _ static, но только с ndk-build.

+1

Вы пытались установить его из своего сценария градации, как описано [здесь] (https://developer.android.com/ndk/guides/cmake.html)? – Michael

+0

Вы пытались установить 'CMAKE_CXX_STANDARD', как описано [здесь] (http://stackoverflow.com/questions/38132793/how-to-control-compiler-flag-invoked-when-specifing-cmake-cxx-standard)? – Florian

ответ

0

Процесс кросс-компиляции, используемый для создания собственных библиотек для Android, использует зависимости C++ от библиотек NDK. NDK, предоставляемый Google, хорош, и у него много вещей, но поддержка C++ 11 и C++ 14 не завершена.

Если вы хотите использовать функции C++ 14, вы можете использовать, например, другие NDK, например, CrystaX NDK. С CrystaX вы также поддерживаете C++ 17.