在用C ++开发的(控制台)应用程序中,我需要向我们开发的Framework.dll添加一个新函数。框架中的这个新函数将使用提供给我们的静态库的类。
我将静态lib链接到我们的框架,一切正常。然后我开始编辑Framework的代码以使用静态库的类。该框架仍然没有警告地构建。运行主应用程序(使用Framwork.dll)时,应用程序将不会启动。它不会事件转到main()。它锁定一个空的提示并无休止地等待。
如果我将静态库直接链接到应用程序,我就没有问题。但那并不是我想用它的地方。
有人知道我做错了吗?
答案 0 :(得分:0)
感谢Hans Passant,我通过DllMain进行了调试。是的,这是一个僵局。问题与在DLL中使用静态库没有直接关系。
在静态库中,我有一些初始化为CRTDLLmain的静态单例。我在我的实现中遵循双重检查的锁定模式,使用c ++原子围栏(如在http://preshing.com/20130930/double-checked-locking-is-fixed-in-cpp11/中)。但是,似乎它对C ++ 11(https://github.com/weidai11/cryptopp/issues/372)并没有很好的效果。 我编写了一个快速的解决方法来测试它,它似乎如此。然后我会联系lib制造商,看看是否有固定版本。