在 DLL 中使用静态库
Use a static library in a DLL
在用 C++ 开发的(控制台)应用程序中,我需要向我们开发的 Framework.dll 添加一个新函数。框架中的这个新功能将使用提供给我们的 classes 静态库。
我link将静态库添加到我们的框架中,一切正常。然后我开始编辑框架的代码以使用静态库的class。该框架仍然在没有警告的情况下构建。当 运行 主应用程序(使用 Framwork.dll)时,该应用程序将不会启动。它不会进入 main()。它锁定一个空提示并无休止地等待。
如果我 link 将静态库直接放入应用程序中,我不会遇到任何问题。但这不是我想用它的地方。
有人知道我做错了什么吗?
感谢 Hans Passant,我通过 DllMain 进行了调试。是的,这是一个僵局。问题与在 DLL 中使用静态库没有直接关系。
在静态库中,我有一些初始化到 CRTDLLmain 中的静态单例。我在我的实现中遵循双重检查锁定模式,使用 C++ 原子栅栏(如 http://preshing.com/20130930/double-checked-locking-is-fixed-in-cpp11/). Is seems however, that it doesn't really work well with C++11 (https://github.com/weidai11/cryptopp/issues/372)。
我编写了一个快速解决方法来测试它,看起来是这样。然后我会联系库制作者,看看是否可以修复版本。
在用 C++ 开发的(控制台)应用程序中,我需要向我们开发的 Framework.dll 添加一个新函数。框架中的这个新功能将使用提供给我们的 classes 静态库。
我link将静态库添加到我们的框架中,一切正常。然后我开始编辑框架的代码以使用静态库的class。该框架仍然在没有警告的情况下构建。当 运行 主应用程序(使用 Framwork.dll)时,该应用程序将不会启动。它不会进入 main()。它锁定一个空提示并无休止地等待。
如果我 link 将静态库直接放入应用程序中,我不会遇到任何问题。但这不是我想用它的地方。
有人知道我做错了什么吗?
感谢 Hans Passant,我通过 DllMain 进行了调试。是的,这是一个僵局。问题与在 DLL 中使用静态库没有直接关系。
在静态库中,我有一些初始化到 CRTDLLmain 中的静态单例。我在我的实现中遵循双重检查锁定模式,使用 C++ 原子栅栏(如 http://preshing.com/20130930/double-checked-locking-is-fixed-in-cpp11/). Is seems however, that it doesn't really work well with C++11 (https://github.com/weidai11/cryptopp/issues/372)。 我编写了一个快速解决方法来测试它,看起来是这样。然后我会联系库制作者,看看是否可以修复版本。