C++静态库中的共享全局变量

Zac*_*ach 5 c++ static global-variables visual-c++

我有一个MS C++项目(我们称之为项目A),我目前正在编译为静态库(.lib).它定义了一个全局变量foo.我有另外两个单独编译的项目(分别称为B和C),每个项目都链接共享静态库A.B和C都是dll,最终在同一个进程中加载​​.我想在同一个过程中从A和B之间共享一个foo实例:一个单例.我不知道如何用项目A来完成单例模式,因为它是分别静态编译成B和C. 如果我在B和C中将foo声明为extern,我最终会在B和C中使用不同的实例.使用带有静态getInstance方法的标准简单单例类模式会导致两个静态foo实例化.

有没有办法实现这一点,而项目A被静态编译成B和C?或者我是否必须制作一个DLL?

Jer*_*ell 4

是的,您必须将 A 设为共享 DLL,或者将其定义为 B 和 C 中的 extern 并静态链接所有三个。