*修订问题(见下文)*
我有一个定义静态全局变量的cpp文件,例如
static Foo bar;
Run Code Online (Sandbox Code Playgroud)
此cpp文件被编译为可执行文件和共享库.可执行文件可以在运行时加载共享库.
如果我在Linux上,似乎有两个这个变量的副本.我假设一个来自可执行文件,另一个来自共享库.其他平台(惠普,Windows)似乎只有一个副本.
什么控制Linux上的这种行为,我可以改变它吗?例如,是否存在编译器或链接器标志,它会强制共享库中此变量的版本与可执行文件中的变量相同?
*问题的修订*
谢谢你到目前为止的答案.在重新审视问题时,实际上并不是上述问题.上面的静态全局变量确实在Windows上有多个副本,因此与我在Linux上看到的没有区别.
但是,我有另一个全局变量(这次不是静态的),它在cpp文件中声明,在头文件中声明为extern.
在Windows上,这个变量有多个副本,一个在可执行文件中,一个在每个dll中加载,而在Linux上它只有一个.所以现在的问题是关于这种差异.如何让Linux拥有多个副本?
(我的程序的逻辑意味着静态全局变量的值取决于非静态全局变量的值,我开始指责错误的变量是问题)