将两个DLL链接到同一个静态库,然后将两个DLL链接在一起是否违反了ODR?

我在代码库中遇到了一种情况,其中两个相互链接的DLL都静态链接到同一个静态库。这会导致两个DLL在链接时都提取静态库的单独副本。

将两个DLL链接到同一个静态库,然后将两个DLL链接在一起是否违反了ODR?

在这种特殊情况下,静态库包含一个旨在成为单例的类...但是由于两个DLL都提取自己的副本,因此当DLL1尝试访问单例时,它得到的实例不同于DLL2!这会导致程序状态和初始化出现很多问题,因为两个库都看到程序的不同状态。

我知道发生了什么错误,这是程序中的错误。但这实际上是在“未定义行为”领域吗?这是否违反了One Definition Rule

静态库不包含单例的情况如何?那是完全可以吗,还是那是个问题? (如果它违反了ODR,我认为它仍然是一个问题。)

wangleaishang9 回答:将两个DLL链接到同一个静态库,然后将两个DLL链接在一起是否违反了ODR?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3136887.html

大家都在问