Qt/C++ 应用程序在从 DLL 使用单例时卡在 main() 启动之前
Qt/C++ application stucks before main() starts when using singleton from DLL
我们有一个基于Qt的应用程序。
今天,我正在将一些资源和代码提取到单独的DLL中。
一旦我开始使用DLL而不是本地类,我就会得到非常奇怪的行为:
应用程序甚至在点击main()函数之前就卡住了。
有没有人知道可能出了什么问题?我不知道在哪里挖掘,所以不知道这里有什么相关。
我们使用cmake 3.4来配置项目,Qt 5.4,Visual Studio 2012。
更新。根据VS输出应用程序启动并成功加载所有dll。所以我可以看到控制台窗口,它是空的。
更新 2. @Martin詹姆斯,几乎是正确的答案。问题出在使用互斥锁的单例初始化中。我不完全明白为什么,但如果在 DLL 加载期间调用它,它会卡在互斥锁上。
更新 3.在某种程度上,当从 DllMain() 锁定时,它是 Visual Studio 2012 死锁中 C++11 std::mutex 的副本。在问这个问题时,锁的原因尚不清楚。
尝试使用互斥锁显式阻止 DLL 初始化中的多次访问可能会导致死锁,原因 MS:(
无法锁定 DLL 上的 c++ 11 std::mutexhttps://connect.microsoft.com/VisualStudio/feedback/details/809005/deadlock-when-locking-std-mutex-during-dllmain-static-initialization
相关文章:
- C++ 实现模板单例类时出现链接错误
- C++中的单例实现在调用 getInstance 函数时不会产生相同的类实例
- _CrtIsValidHeapPointer(块)错误在应用单例-帕特恩后退出主窗口时引发
- 访问单例类C++时出现问题
- 我的单例中的数组在离开函数后没有保留信息,然后在尝试再次访问信息时崩溃
- C++在单例类中创建类实例时遇到困难
- 如何在 c++ 中使用单例模式时编写 cmake 文件
- 运行时动态加载和单例
- GDB 在单步执行单例的静态方法时没有显示这一点?
- 在进行 OOP 状态机设计时如何避免单例
- C++懒惰的单例挂在加载时
- 在DLL中提供的ZeroMQ上下文单例在程序退出时崩溃(VS2010 win7 x64 zmq 4.0x)
- 我可以在编译期间从 gcc 获取单例的地址或链接时吗?
- 当周围有线程时,创建类的许多实例会失败吗?- 单例模式
- 扩展具有私有构造函数和析构函数的单例类会给出编译时警告
- Qt/C++ 应用程序在从 DLL 使用单例时卡在 main() 启动之前
- 创建单例时出现错误
- 当使用单例包含指针数组时,左值错误
- "Magic static" 在另一个翻译单元的静态销毁阶段引用时单例崩溃
- 尝试在 c++ 中编译单例时出现编译错误