Я компилирую стороннюю библиотеку Java для Android, которая использует JNI. Я прочитал соответствующие страницы о добавлении поддержки C ++ на developer.android, но меня все еще смущает пара проблем, касающихся среды выполнения C ++ STL, которые, как я надеялся, я могу прояснить здесь:
1- Моя библиотека не контролирует приложение, в которое она будет встроена, поэтому я не знаю, будут ли другие библиотеки, которые могут использовать статические / общие STL. Если я использую статическую среду выполнения C ++ с ANDROID_STL = c ++ _ static, это безопасно или мне нужно беспокоиться о другой библиотеке, которая может использовать что-то вроде gnustl_static, что может конфликтовать с моей?
2- Если я использую общую среду выполнения C ++ с ANDROID_STL = c ++ _ shared, является ли это гарантией того, что конкретный элемент в STL будет использовать среду выполнения libc ++, или можно ли использовать gnustl, если он не существует? Например, если бы я использовал std :: string с общей средой выполнения c ++ (c ++ _ shared) в приложении, которое имеет другую библиотеку gnustl_static, будет ли моя реализация std :: string взята из libc ++ или gnustl?
В идеале я хотел бы иметь очень урезанную версию статической среды выполнения C ++ с (c ++ _ static), которая включает только std :: vector, std :: string и std :: map. На самом деле я планировал использовать что-то вроде -ffunction-section, как описано здесь и # 768.
Пожалуйста, посоветуйте и спасибо.
Детали окружающей среды
- Pkg.Desc = Android NDK
- Pkg.Revision = r15c
- Android Studio = 3.1.2
- система: cmake Хост ОС: Arch Linux ($ uname -r% 4.18.5-arch1-1-ARCH)
- Компилятор: Clang ++
- STL: c ++ _ static / c ++ _ общий
c++_shared
после r16, поскольку gnu_stl (как статический, так и общий) устарел. Могут возникнуть проблемы с искаженными именами, если у пользователя более одного STL. Итак, если библиотека не взаимодействует с другими библиотеками, безопаснее использоватьc++_static
, как вы упомянули. 19.09.2018