【发布时间】:2010-05-12 14:06:15
【问题描述】:
我有一个静态库libStatic,它定义了一个像这样的全局变量
头文件libStatic/globals.h:
extern int globvar;
代码文件libStatic/globals.cpp:
int globvar = 42;
DLL libDynamic 和可执行文件runner 正在使用这个全局变量。此外,libDynamic 在运行时链接到 runner(通过 LoadLibrary()、GetProcAddress() 和工作......)
我知道这将导致globvar 被创建两次,一次在 runner 的堆中,一次在 libDynamic 的堆中,这当然是非常不可取的.
这附近有什么好办法吗?如何确保 libDynamic 和 runner 使用相同的globvar?
【问题讨论】:
-
必须使用全局变量吗?或许你能想出更好的方法来绕过这种状态?
-
这个例子被简化了很多,以免问题过于复杂。实际上,它不仅仅是一个简单的 int 变量,而是一个复杂的单例对象。我正在寻找一种方法来确保单例在应用程序和动态库的组合范围内仅存在一次。
标签: c++ global-variables dynamic-linking