Мой собственный проект на C++. Я должен подключиться к платформе Android, основанный на нескольких статических и динамических библиотеках, используя на основе C++ 11 потоковые безопасные синглтоны, , которые совместно используются этими модулями.Native Singletons на платформе Android?
Вот пример моей фактической структуры:
brCore (Core elements, Manager (Singletons), Logger (Singleton) ect.) STATIC
brGrapics (Generic graphics) uses brCore STATIC
brOpenGLES (GLES renderer) uses brCore, brGraphics DYNAMIC
Мой Android приложений (также DYNAMIC) использует эти три библиотеки и загружает brOpenGLES динамически при запуске. на Linux и Windows, платформы ничего работает нормально, но на андроид, у меня проблемы с Одиночки:
04-08 06:47:24.601: I/NativeActivitySimpleExample(1059): brSingleton getInstance called
04-08 06:47:24.611: I/NativeActivitySimpleExample(1059): Singleton constructor invoked : brFileHandler
04-08 06:47:24.611: I/NativeActivitySimpleExample(1059): brFileHandler set internal data path: /data/data/com.binrev/files
04-08 06:47:24.611: I/NativeActivitySimpleExample(1059): brSingleton getInstance called
04-08 06:47:24.031: I/NativeActivitySimpleExample(1059): Try to initialize Render API
04-08 06:47:24.031: I/NativeActivitySimpleExample(1059): brSingleton getInstance called
04-08 06:47:24.051: I/NativeActivitySimpleExample(1059): Singleton constructor invoked : brRessourceManager
04-08 06:47:24.051: I/NativeActivitySimpleExample(1059): brSingleton getInstance called
04-08 06:47:24.251: I/NativeActivitySimpleExample(1059): Try to init Logger: brCore
04-08 06:47:24.251: I/NativeActivitySimpleExample(1059): Search for existing logger
04-08 06:47:24.282: I/NativeActivitySimpleExample(1059): brSingleton getInstance called
04-08 06:47:24.282: I/NativeActivitySimpleExample(1059): Singleton constructor invoked : brRessourceManager
04-08 06:47:24.282: I/NativeActivitySimpleExample(1059): brSingleton getInstance called
04-08 06:47:24.282: I/NativeActivitySimpleExample(1059): Singleton constructor invoked : brConfigManager
04-08 06:47:24.601: I/NativeActivitySimpleExample(1059): brSingleton getInstance called
04-08 06:47:24.611: I/NativeActivitySimpleExample(1059): Singleton constructor invoked : brFileHandler
04-08 06:47:24.611: I/NativeActivitySimpleExample(1059): brSingleton getInstance called
Как вы можете видеть, конструктор из потокобезопасных одиночек называется несколько раз, что не должно быть , Значения, установленные на Singleton (внутренний путь данных BrFileHandler) , теряются в последующих точках. Похоже, библиотеки имеют отдельные экземпляры синглтонов и не могут делиться контентом между библиотечными границами ...
Как я могу решить эту проблему? Спасибо за любую помощь.