【发布时间】:2015-09-10 13:47:11
【问题描述】:
我正在寻找一种共享单例实例的替代方法 在主可执行文件和 dll 之间。
我的项目目前包含几个静态库,它们链接到可执行文件中,如下所示:
common.lib (holds singletons)
/ \
/ \
v \
tools.exe \
V
database.lib (holds singletons)
|
V
shared.lib (holds singletons)
/
/
|
v
game.lib (holds singletons)
|
v I-- Extension.dll
server.exe <---I-- Extension.dll (dynamic loaded extensions)
I-- Extension.dll
^
|
+--------------------------------------------------------+
I Extensions loaded through LoadLibrary & dlopen I
I need to have access to the singletons instantiated in: I
I common.lib, database.lib, shared.lib and game.lib I
静态库提供了几个我想公开给动态加载的 dll 的单例,它们始终与主 exe 二进制兼容。
我不能只将静态库转换为动态库,因为它会破坏很多并且太费力了。 我目前的做法是转静态单例吸气剂:
class Log
{
public:
static Log* instance();
};
变成类似:
class Log { };
__declspec(dllexport) Log* instance();
并通过单独的动态库导出单例实例,例如:
common_inst.dll 为common.lib 导出单例。
game_inst.dll 为game.lib 导出单例。
这种方法有效,但我对它不满意。
是否有另一种跨平台兼容的可能性来将单例共享到共享库而不通过 dllexport 导出?
【问题讨论】:
标签: c++ dll shared-libraries