我想将 QT 集成到现有的桌面 C++ 项目中。要求是QT 应该使用 MSVC2013 64 位静态构建并为编译器设置/MT 标志,所以我从源代码构建QT5.5.0。
集成按预期工作,我设法从 QtCore.lib 测试了一些 Qt 的对象(QFile,QObject)。该应用程序似乎运行没有任何问题,没有崩溃。但是,该程序存在-1073741819
错误级别。我附加了调试器并尝试在 Visual Studio 中捕获异常,我得到以下信息:
First-chance exception at 0x00007FFAC6E4E1A2 in silversim.exe: 0xC0000005: Access violation executing location 0x00007FFAC6E4E1A2.
Unhandled exception at 0x00007FFAC6E4E1A2 in silversim.exe: 0xC0000005: Access violation executing location 0x00007FFAC6E4E1A2.
我撤消了代码集成,直到我在函数中只有一个简单的QObject object;
声明。通过这个简单的声明,程序存在错误,没有使用任何 Qt 对象,程序正常存在。
这里发生了什么?可能是到 Qt 的静态链接?可能是 Qt5.5 版本中的错误?或者我的程序中的其他东西试图在清理过程中以某种方式处理 qt .libs?
更新
感谢 IDA 反编译器,我设法找出崩溃发生的位置,但我仍然不知道为什么。它崩溃了void __fastcall qt_watch_adopted_thread(HANDLE hObject, struct QThread *)
。正如我所注意到的,Qt 创建了一些在程序退出时不会被销毁的线程,并且这些线程会尝试访问无效内存。也许它与这个打开的 qt 错误有关:https ://bugreports.qt.io/browse/QTBUG-40247但就我而言,我没有加载任何插件。