【问题标题】:Creating a Singleton in a NDK static library在 NDK 静态库中创建单例
【发布时间】:2012-11-05 13:17:43
【问题描述】:
我正在尝试为 android ndk 中的 2 个不同库创建一个单例。
想象一下我有:
- lib1(静态)
- lib2(共享)
- lib3(共享)
lib1 始终定义为 lib2 和 lib3 的 LOCAL_STATIC_LIBRARIES
但是当我在 lib2 上设置单例的值时,这个值在 lib3 上仍然为 NULL。
如何使用这种架构构建单例?
【问题讨论】:
标签:
android
android-ndk
singleton
shared-libraries
static-libraries
【解决方案1】:
如here 和here 所讨论的,该问题很常见并且没有好的解决方案。共享库具有链接的静态库的单独副本,包括代码和数据。不同 SO 中的静态库实例只是不交互,而且有很多很好的理由。
您需要的是一块可供双方访问的内存。您可以将单例提升到 Java 级别(毕竟它在 Android 之下)。您可以拥有一个具有众所周知名称的临时文件。 C 级 TLS 也可能有所帮助。
Android 的共享内存设施 (ashmem) 将毫无用处,因为它不提供命名块。