2016-01-19 2 views
1

В файле Application.mk при использовании APP_STL: = stlport_static я могу использовать C++ 11 dynamic_cast, но он не будет компилировать «random " функции.Настройки Android Application.mk для использования C++ 11 <random> и dynamic_cast

Я пробовал APP_STL: = gnustl_static и APP_STL: = C++ _ static, но это не позволит мне использовать dynamic_cast.

Каковы правильные настройки Application.mk, чтобы использовать их одновременно?

Мой текущий Application.mk выглядит следующим образом:

APP_CPPFLAGS += -std=c++11 
APP_STL := stlport_static 
APP_ABI := armeabi armeabi-v7a x86 

EDIT:

После инструкции Michaels наконец Application.mk, что работал было:

#LIBCXX rebuild was needed once when using APP_STL := c++_static 
LIBCXX_FORCE_REBUILD := true 
APP_CPPFLAGS += -std=c++11 -frtti -fexceptions 
APP_STL := c++_static 
#Also the gnu compiler can be used 
#APP_STL:= gnustl_static 
APP_ABI := armeabi armeabi-v7a x86 
NDK_TOOLCHAIN_VERSION := 4.8 
+0

Теперь откройте в AOSP багтрекер: [Выпуск 216331: STLport не поддерживает C++ 11] (http://code.google.com/ р/Android/вопросы/детали? ID = 216331). – jww

ответ

1

Похоже, вы забыли включить RTTI, который используется для выполнения проверок времени выполнения, который используется dynamic_cast.

Цитируя the documentation:

[To] ensure compatibility with earlier releases, [the NDK toolchain] compiles all C++ sources with -fno-rtti by default.

To enable RTTI support for your entire app for your entire application, add the following line to your Application.mk file:

APP_CPPFLAGS += -frtti

Я не вижу random заголовок среди источников STLPort, так что, вероятно, не поддерживает эту функцию. Вместо этого используйте другую реализацию STL, например gnustl.

Так что вам нужно что-то вроде:

APP_CPPFLAGS += -std=c++11 -frtti 
APP_STL := gnustl_static 
+0

Я думаю, что исправлено использование dynamic_cast, но теперь я получаю эту ошибку: ndk/sources/cxx-stl/llvm-libC++/libcxx/include/atomic: 922: error: неопределенная ссылка на '__atomic_fetch_add_4'. и я боюсь, что это не связано с конфигурацией. –

+0

Вам нужно добавить '-latomic' в ваш' LOCAL_LDFLAGS'. – Michael

+0

Он работает с gnustl_static, но не с C++ _ static. Почему это может быть? –