2013-04-08 43 views
0

我必须移植到android平台的本地C++项目基于几个静态和动态库,使用基于C++ 11的线程安全单例, ,它们在这些模块之间共享。android平台上的原生Singletons?

这里是我的实际结构的例子:

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平台上的任何工作正常,但在Android上,我得到了与单身烦恼:

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内部数据路径) 中设置的值在稍后的点丢失。它看起来像图书馆有单独的单身实例,并不能共享图书馆边界之间的内容...

我怎么能解决这个问题? 感谢您的帮助。

回答

0

问题解决了。我必须使用我的模块的动态库实例。